2017-04-18 73 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

所有的單詞是在單行還是不同的行中? – stanleyli

+0

請參閱[this](http://stackoverflow.com/questions/3277503/how-儘管它可能會也可能不會給你一個現成的解決方案,但它肯定會教你如何(以及如何不要)讀取文件並將內容放入容器中l你的元素在同一行上,如果你願意的話,你只需要給'split'添加一個調用並將列表轉換爲元組。 –

回答

3

使用str.format更多PRECI佩德羅洛比託的答案的變化輸出字符串格式的本身控制:

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)) 

版用逗號除最後一行的每一行的末尾:

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執行此: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

可能您應該從這個練習中學到的最重要的技巧是:str對象沒有任何方法,如append()insert()等。這是因爲str objects- strings-是Python中的不可變對象。您不能更改一個字符串。你只能用它來創造另一個新的字符串(並扔掉舊的)。

由於您的文件格式看起來像第一空間只出現在您希望您的逗號插入的位置,你可以使用replace()方法就像你正在嘗試做的,像這樣:

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

注意replace()方法上的一個字符串不是修改原始字符串;相反,它返回一個新的字符串。這就是爲什麼你必須在行的開頭使用line =部分,從而替換舊的字符串。

第三個參數 - 最後的數字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) 

這會打開一個文本文件,並讀入每一行。然後剝去換行符。 然後它分開線條,並添加「+項目+」。然後,它需要加引號這句話,喬伊納所有的人都一起用逗號

「」加入(

最後,它增加了這個字符串的整體輸出,並打印出來的結束