2016-10-03 8 views
0

私の目標は、特定のファイルを開くためのユーザー入力を受け取るPythonプログラムを作成し、そのファイルの内容を(ユーザーが指定した)新しいファイルにコピーします。新しいファイルからスペースと数字をすべて削除します。新しいファイルを作成してその内容を操作するのに問題がある

私の 'sequence'ファイルの内容を新しく作成した 'newsequence'ファイルに正常にコピーしています。 'newsequence'ファイルを操作しようとすると、2回目のforループですべてが崩れます。

「newsequence」を読むことができなかったエラーが発生しました(おそらく、ファイルの内容ではなく変数を読みたいと思ったからでしょうか?)。私はファイルを文字列に変換すると助けになると思っていましたが(私はそれをしないとうまくいかなければならないと思っていたのですが)、7行目で 'newsequence'を文字列に変換しました。

これは、少なくとも "io.UnsupportedOperation:not readable"エラーを発生させることなく、完了まで実行するプログラムを持っていますが、それでも正しいわけではありません。私の出力ファイルは元の 'sequence'ファイルと同じですが、末尾に単に "8"という余分な行が含まれている点が異なります。この "8"はどこから来ていますか、私がしたいことをするために私のコードにどのような変更を加える必要がありますか?

私はプログラミングにはとても慣れていないので、一連のばかげた間違いを犯している可能性があります。あなたが私に与えることができる何か助けをありがとう。

sequence = open(input("Choose sequence file: ")) 
name = input('Enter name of new text file, without .txt: ') + '.txt' 

with open(name, 'a') as newsequence: 
     for line in sequence: 
       newsequence.write(line) 
     for line in str(newsequence): 
       result = ''.join(i for i in line if i.isdigit()) 
       result = result.replace(" ","") 
       newsequence.write(result) 
sequence.close() 
newsequence.close() 
+1

'with open(name、 'a')as newsequence:'を使用すると 'newsequence.close()'は不要です。これは 'with'がこのファイルを閉じるためです。 – furas

+1

'open(...、 'a')'は 'append'を開き、' read'を開きません。 – furas

+0

ファイルを同時に読み書きすることはできません。読み書きを停止するrembemberへのファイル使用ポインタ - このポインタを再度読み込みを開始するファイルに移動する必要があります(またはファイルを再度開く必要があります)。 1つのループの中で、より多くのことをすることができます。 - '連続する行のために: ' – furas

答えて

1

私はあなたが間違ってファイルに2回書き込む間違いをしていると思います。ファイルに書き込んだり、読み込んだり編集したりするのではなく、書き起こし中にファイルを変更しないでください。私はこのようなあなたの機能を変更します

sequence = open(input("Choose sequence file: ")) 
name = input('Enter name of new text file, without .txt: ') + '.txt' 

with open(name, 'w') as newsequence: # notice the `w` instead of the `a` 
     for line in sequence: 
       result = ''.join(i for i in line if i.isdigit()) 
       result = result.replace(" ","") 
       newsequence.write(result) 
sequence.close() 
newsequence.close() 
+1

' with ... newsequence'は、後で 'close()'する必要がないということを意味します。一貫性を保つために、 'sequence'ファイルを' with'ステートメントで開く必要があります(同じ 'with'ステートメントで複数のファイルを開くことができます)。 – tripleee

+0

よかった!私は編集を行います。 –

0

なぜあなたは1つのforループでこれをしないのですか?

テストされていない:

file_in = open(input("Choose sequence file: ")) 

name = input('Enter name of new text file, without .txt: ') + '.txt' 

with open(name, 'a') as file_out: 
    for line in file_in: 
     line = ''.join(i for i in line if i.isdigit()) 
     line = line.replace(" ","") 
     file_out.write(line) 

file_in.close() 

あなたは(行ずつ)を読み、同じファイルに(行ずつ)を記述することはできません - あなたはそれを読む前に、古いテキストを上書きします。

関連する問題