![](/img/trans.png)
[英]How to change specific lines in a text file and enforce this change when writing output file
[英]How to change lines in a text file?
我試圖在.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()
你可能需要這樣的東西:
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')
使用str.format
更改Pedro Lobito的答案,以更精確地控制輸出字符串格式:
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")]
您可以從本練習中學到的最重要的一點是: str
對象沒有任何方法,如append()
或insert()
等。 這是因為str
對象 - 字符串 - 是 Python 中的不可變對象 。 你不能改變一個字符串。 你只能用它來制作另一個新的字符串(扔掉舊的字符串)。
由於您的文件格式看起來像第一個空格只出現在您希望插入逗號的位置,因此您可以像嘗試一樣使用replace()
方法,如下所示:
line = line.replace(' ', ', ', 1)
請注意,字符串上的replace()
方法不會修改原始字符串; 相反,它返回一個新字符串。 這就是為什么你必須line =
的開頭使用line =
part,從而替換舊的字符串。
第三個參數 - 最后的數字1-確保只有行中的第一個空格受到影響。 如果末端有多個空間或任何懸掛空間,則不會更換。
有更短的編寫方式,但這里有一種方法可以解決您提出簡單文本文件和寫問題的問題。 將文本文件保存為ocean.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 +”。 然后它用引號中的這個詞,並用逗號連接所有這些
“,“。加入(
最后,它將此字符串添加到整個輸出中,並在結尾處將其打印出來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.