2017-04-18 7 views
2

テキストを.txtファイルでフォーマットしようとしています。コンテンツもxmlに入っていますが、テキストファイルにコピーして、私はそれをしようとしています。私はそれを変換したファイルを開き、各ラインのためにする方法を把握しようとしていますテキストファイルの行を変更するには?

Pufferfish Ocean 
Anchovy Ocean 
Tuna Ocean 
Sardine Ocean 
Bream River 
Largemouth_Bass Mountain_Lake 
Smallmouth_Bass River 
Rainbow_Trout River 

::これは、現在のように設定されている

('Pufferfish', 'Ocean') 

これを行う方法はありますか?

これは、「STR」を私が間違っている知っている、これまでにしようとしています、と私は正しい構文と方法の変更を検索しようとしているものです:

f1 = open('fish.txt', 'r') 
f2 = open('fish.txt.tmp', 'w') 

for line in f1: 
    f2.write(line.replace(' ', ',')) 
    for word in line: 
     f2.write(word.append('(', [0])) 
     f2.write(word.append(')', (len(word)))) 
f1.close() 
f2.close() 
+3

何を試しても何がうまくいかないのですか? – Vallentin

+1

すべての単語が1行または異なる行にありますか? – stanleyli

+0

[this](http://stackoverflow.com/questions/3277503/how-それはあなたの問題に対する準備ができている解決策を提供するかもしれないし、提供していないかもしれないが、 )ファイルを読み込んで内容をコンテナに入れます。 l要素が同じ行にある場合は、必要に応じて 'split'の呼び出しを追加してリストをタプルに変換するだけです。 –

答えて

3

よりPRECIためstr.formatを使用してペドロロビトの答えに変化出力文字列フォーマットのSE制御:最後の行を除く各行の末尾にカンマで

with open('old.txt') as f_in, open("new.txt", "a") as f_out: 
    for line in f_in: 
     a, b = line.split() 
     f_out.write("('{}', '{}')\n".format(a, b)) 

バージョン:list(enumerate(["a", "b", "c"]))戻り[(0, "a"), (1, "b"), (2, "c")]

+0

最後の行を除く各行の最後にコンマを追加する方法はありますか? 'new_file.write(" {'}'、 '{}'、 '、')\ n ".format(a、b、c))'? – Babeeshka

+1

最後を除く各行の末尾にカンマを追加しますか? \ n( '{}'、 '{}') "形式(a、b)' – Messa

+0

もちろん、コンマで区切られた行があります。開始点...いくつかの 'if'で修正することができます。 – Messa

4

あなたのようなものが必要な場合があります。

with open('input.txt') as input, open("output.txt", "a") as output: 
    for line in input: 
     output.write(str(tuple(line.split()))+"\n") 

出力:

('Pufferfish', 'Ocean') 
('Anchovy', 'Ocean') 
('Tuna', 'Ocean') 
('Sardine', 'Ocean') 
('Bream', 'River') 
('Largemouth_Bass', 'Mountain_Lake') 
('Smallmouth_Bass', 'River') 
('Rainbow_Trout', 'River') 
+0

'new_file'を' output'に変更するのを忘れました –

+0

、tks! –

+2

魅力のように働いて、感謝ペドロ! – Babeeshka

1

with open('old.txt') as f_in, open("new.txt", "a") as f_out: 
    for n, line in enumerate(f_in): 
     a, b = line.split() 
     if n > 0: 
      f_out.write(",\n") 
     f_out.write("('{}', '{}')".format(a, b)) 
    # do not leave the last line without newline ("\n"): 
    f_out.write("\n") 

enumerateはこれを行いますおそらく、この練習から学ぶべき最も重要なお菓子は:strオブジェクトにはのようなメソッドがありませんまたはinsert()など。これは、strオブジェクト文字列がPythonで不変オブジェクトであるためです。あなたは変更できません文字列です。これを使用して、別の文字を文字列にすることができます(古い文字を破棄します)。

最初のスペースだけで、あなたのカンマを挿入したい場所に表示されるように、あなたのファイル形式が見えますので、あなたがそうのように、やろうとしているように、あなたはreplace()メソッドを使用できますことを

line = line.replace(' ', ', ', 1) 

注意文字列のreplace()メソッドはありません元の文字列を変更します。代わりに、新しい文字列を返します。そのため、行の先頭にline =部分を使用して、古い文字列を置き換える必要があります。

最後の1番目の引数 - 行の最初のスペースのみが影響を受けることを確認します。最後に複数のスペースやハングスペースがある場合、それらは置き換えられません。

1

これよりも短い書き方がありますが、簡単なテキストファイルを作成して尋ねたときの問題を解決する方法の1つです。テキストファイルを海のように保存します。txt

output = "" 
with open("ocean.txt") as f: 
    for line in f: 
     line.strip() 
     line_fmt = ",".join('"' + item + '"' for item in line.split()) 
     output += ("({})".format(line_fmt)) + "\n" 

print(output) 
# To save as a file: 
with open('formatted.txt', 'w') as outfile: 
    outfile.write(output) 

これは、テキストファイルを開き、各行を読み込みます。その後、改行文字を取り除きます。 次に、行を分割して "+ item +"を追加します。そして、それは一緒にカンマと引用符、およびjoinesでそれらのすべてを、この言葉を取る

「」。(

最後に参加し、それが全体の出力にこの文字列を追加し、でそれをプリントアウト最後に

関連する問題