2017-02-22 2 views
1

メモ帳++を使用してデータを再構成しています。各.txtファイルには99行があります。私はpythonスクリプトを実行して99個の単一行ファイルを作成しようとしています。メモ帳を使用して各行を別々の.txtファイルとして保存します。++

私が現在実行している.pyスクリプトがあります。これはトピックの前のスレッドで見つかりました。私がなぜわからないんだけど、それは非常に仕事をしていません。

yourfile = open('filename.TXT', 'r') 
    counter = 0 
    magic = yourfile.readlines() 

    for i in magic: 
     counter += 1 
     newfile = open(('filename_' + str(counter) + '.TXT'), "w") 
     newfile.write(i) 
     newfile.close() 

私は、この特定のスクリプトを実行すると、それは単にホストファイルのコピーを作成し、それはまだ99行を持っています。

+0

その隙間に 'print(len(magic))'を追加してください。どういうことですか? '.readlines()'のように1行しかないと思っているようです。ファイル内の行はどのように区切られていますか? –

+0

これらのtxtファイルには行区切り文字はありません。単なる改行です。 – enuf

+1

以下の答え(元々削除していた '.readlines()'の呼び出しから99を除いたものを除く)は、あなたのコードと全く同じように機能するはずです。彼らが突然働いていたら、あなたの問題の記述は不完全だと思います。 「ホストファイルのコピーを作成する」とすると、「魔法」には1つの要素しかないように聞こえます。 –

答えて

2

あなたのスクリプトの構造を少し変更することがあります。この形式で

with open('filename.txt', 'r') as f: 
    for i, line in enumerate(f): 
     with open('filename_{}.txt'.format(i), 'w') as wf: 
      wf.write(line) 

あなたのファイルハンドラを閉じるためにコンテキストマネージャに頼るの利点を持っており、また、あなたが読む必要はありません。個別に物事、より良い論理的な流れがあります。

+2

さらに良い: '私のために列挙する行(f): – jez

+0

合意と編集! – Kelvin

1

これを達成するために、次のコードを使用することができます。コメントしましたが、お気軽にお問い合わせください。

#reading info from infile with 99 lines 
infile = 'filename.txt' 

#using context handler to open infile and readlines 
with open(infile, 'r') as f: 
    lines = f.readlines() 

#initializing counter 
counter = 0 

#for each line, create a new file and write line to it. 
for line in lines: 

    #define outfile name 
    outfile = 'filename_' + str(counter) + '.txt' 

    #create outfile and write line 
    with open(outfile, 'w') as g: 
     g.write(line) 

    #add +1 to counter 
    counter += 1 
+0

「+1をカウンターに追加」のようなコメントは絶対に書き込まないでください。 –

0
magic = yourfile.readlines(99) 

このように '99' を削除してみてください。

magic = yourfile.readlines() 

私は試してみましたが、それぞれ99行のファイルが1行あります。

関連する問題