使用Python读/写循环文本文件

时间:2019-01-29 19:26:39

标签: python python-3.x python-2.7

我想打开一个现有的txt文件,并搜索多次出现在不同位置的文本行。每次找到搜索内容时,请在其下方插入2行,并指定文字。

我尝试了这段代码,但是在“ Path.write”行上出现“ AttributeError”(“ str”对象没有属性“ write”)。

Path = '...\\Test.txt'
searchString = '* Start *'

with open(Path, 'r+') as f:
    content = f.readlines()

nextLine = False 

for line in content:
    if searchString in line:
        nextLine = not nextLine
else:
    if nextLine:
        Path.write('Name\nDirection')
        nextLine = not nextLine
    else:
        pass

我还必须向'Direction'行分配一个数字,该数字从0开始并递增15,直到读取所有文件。因此,在找到第一个实例之后,将两行插入到这样的现有txt文件中;

...some text in the existing text file....
* Start *
Name
Direction 0

然后在下一个实例(方向15)上更改为15,然后在方向30(即方向30)上更改为15,直到文件结束。

编辑代码:简化的编码。有人投票支持我

Path = '...\\Test.txt'

direction_number = 0
#Open new file
Newfile = open(Path, 'w')

#read other file
with open(Path, 'r') as f:
    content = f.readlines()

#if find special text, write other lines to new file            
for line in content:
    Newfile.write(line)
    if searchString in line:
        Newfile.write('Name\nDirection %d' % direction_number)
        direction_number += 15

Newfile.close()

1 个答案:

答案 0 :(得分:0)

您应该只写一个新文件,而不是尝试重新打开并将行插入到原始文件中。因此,对于旧文件中的每一行,请将其写入新文件,如果其中包含有问题的文本,则另外写入两行。

direction_number = 0

with open("newfile.txt", 'w') as g:

    # Loop through every line of text we've already read from
    # the first file.
    for line in content:

        # Write the line to the new file
        g.write(line)

        # Also, check if the line contains the <searchString> string.
        # If it does, write the "Name" and "Direction [whatever]" line.
        if searchString in line:
            g.write('Name\nDirection %d\n' % direction_number)
            direction_number += 15

编辑:要详细说明第二条with open语句:请记住,您之前曾使用with open(Path, 'r+') as f:来读取文件。  Path部分是文件名的存储位置,r+部分意味着您正在打开文件以进行读取,而“ f”只是一个变量,它实际上表示,“我们对f做的任何事情,我们都会对文件做”。同样,为了开始使用新文件,我写了with open("newfile.txt", 'w') as g:。 “ newfile.txt”是文件的名称。 “ w”表示您正在打开该文件以写入文件,而不是从文件中读取文件(如果文件不存在,它将创建它;如果文件已经存在,则它将完全覆盖它)。然后,“ g”只是我选择引用该文件的变量。因此g.write(line)只是将第一个文件的下一行文本写入第二个文件中的下一行文本。我想您可以在这里再次使用“ f”,因为此时您已经读取了旧文件中的所有行。但是使用不同的变量可以减少正在处理的文件的任何歧义,尤其是如果您想更改此变量,以便同时打开一个文件供读取而又打开另一个文件供写入时。