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

时间:2017-04-18 00:24:33

标签: python text

我正在尝试格式化.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()

4 个答案:

答案 0 :(得分: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')

答案 1 :(得分:3)

使用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")]

答案 2 :(得分:1)

您应该从这个练习中学到的最重要的一点是:str对象没有append()insert()之类的任何方法。这是因为 str对象 - 字符串 - 是Python中的不可变对象。您 无法更改 字符串。您只能使用它来创建另一个 new 字符串(并丢弃旧字符串)。

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

replace()

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

第三个参数 - 最后的数字1-确保只有行中的第一个空格受到影响。如果末端有多个空间或任何悬挂空间,则不会更换。

答案 3 :(得分: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 +”。然后它在引号中使用这个单词,并用逗号

连接所有这些单词

<强> “”。加入(

最后,它将此字符串添加到整个输出中,并在结尾处将其打印出来。