我想打开一个现有的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()
答案 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
”,因为此时您已经读取了旧文件中的所有行。但是使用不同的变量可以减少正在处理的文件的任何歧义,尤其是如果您想更改此变量,以便同时打开一个文件供读取而又打开另一个文件供写入时。>