Python 如何更改文本文件中的行?

Python 如何更改文本文件中的行?,python,text,Python,Text,我正在尝试格式化.txt文件中的文本。内容也是xml格式的,但我将其复制到一个文本文件中,并尝试为其添加内容。目前的设置如下: 河豚鱼海洋 凤尾鱼海洋 金枪鱼海洋 沙丁鱼海 布雷姆河 大口巴斯山湖 斯莫尔茅斯河 虹鳟河 我试图找出如何打开文件,并将每行文件转换为: ('Pufferfish', 'Ocean') 有办法做到这一点吗 这就是我目前正在尝试的,我知道这是错误的,我正在尝试查找正确的语法和方式更改'str': f1 = open('fish.txt', 'r') f2 = open

我正在尝试格式化.txt文件中的文本。内容也是xml格式的,但我将其复制到一个文本文件中,并尝试为其添加内容。目前的设置如下:

河豚鱼海洋
凤尾鱼海洋
金枪鱼海洋
沙丁鱼海
布雷姆河
大口巴斯山湖
斯莫尔茅斯河
虹鳟河
我试图找出如何打开文件,并将每行文件转换为:

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

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

这样做:
list(enumerate([“a”,“b”,“c”))
返回
[(0,“a”),(1,“b”),(2,“c”)]
从这个练习中,您应该了解的最重要的一点可能是:
str
对象没有任何类似
append()
insert()
之类的方法。这是因为在Python中,
str
对象-字符串-是不可变的对象。不能更改字符串。您只能使用它来创建另一个新字符串(并扔掉旧字符串)

由于您的文件格式看起来像第一个空格只出现在您希望插入逗号的位置,因此您可以像尝试那样使用
replace()
方法,如下所示:

line = line.replace(' ', ', ', 1)
请注意,字符串上的
replace()
方法不会修改原始字符串;相反,它返回一个新字符串。这就是为什么必须在行首使用
行=
部分,从而替换旧字符串的原因


最后的第三个参数(数字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)
这将打开一个文本文件,并读取每一行。然后去掉换行符。 然后将行拆分,并添加“+项+”。然后用引号把这个词引起来,用逗号把它们连在一起

“,”。加入(


最后,它将此字符串添加到总输出中,并在最后打印出来。

您尝试了什么,哪些不起作用?所有单词是在一行还是在不同的行中?请看,虽然它可能会或可能不会为您的问题提供现成的解决方案,但它肯定会教您如何(以及如何不)解决问题读取一个文件并将内容放入一个容器中。如果所有元素都在同一行,您只需添加对
split
的调用,并将列表转换为元组,如果您愿意的话。每行有两个单词,例如“Pufferfish Ocean”。我正在尝试写一些东西,我会上传它。但是到目前为止还没有成功。您忘记将
new_文件
更改为
output
是否有办法在每行末尾添加逗号(最后一行除外)?您可以这样做:
new_文件。write(“{},{},,”)\n.格式(a,b,c))
?在每行末尾添加逗号(最后一行除外)?有时最好在以下行之前添加逗号:)
“,\n(“{}”,“{}”)”。格式(a,b)
当然,行的开头只有逗号。。。如果,可以用一些
来修复。这很聪明,比我刚才尝试用它做的更好。第一个可以随时手动删除。不过,我会看看我能用“如果”的说法做些什么。谢谢,梅萨@我已经用代码示例更新了答案