AttributeError:'str'对象在最后一行中没有属性'write'错误,需要了解

2024-09-24 08:35:34 发布

您现在位置:Python中文网/ 问答频道 /正文

问题提示:跳过以下文件的第5行,将所有文件内容写入新文件

测试文件:

line1
line2
line3
line4
line5
line6
line7

新文件:

line1
line2
line3
line4
line6
line7

代码:

testFile = 'C:/Users\Karan\Documents\\test.txt'
newFile = 'C:/Users\Karan\Documents\\newtext.txt'

for num, line in enumerate(testFile, 1):
    if num != 5:
        newFile.write(line)
Errors:

Traceback (most recent call last):
  File "C:/Users/Karan/AppData/Roaming/JetBrains/PyCharm2020.1/scratches/scratch_1.py", line 7, in <module>
    newFile.write(line)
AttributeError: 'str' object has no attribute 'write'

我知道这是最后一行的问题,但我整天都在努力,我真的希望有一双新的眼睛来观察它


Tags: 文件txtlineusersdocumentswritekarantestfile
3条回答

newFile是要打开的文件的名称,而不是通过实际打开该文件名创建的文件对象

实际上错误是“str没有属性…”,因为您使用的对象是字符串

您需要使用open()首先打开文件,然后才能读写它们

with open('C:/Users\Karan\Documents\\test.txt') as testFile:
    File = testFile.readlines()

with open('C:/Users\Karan\Documents\\newtext.txt','w') as newFile:
    File.pop(4) # Remove the fifth line
    newFile.write(''.join(File))

更新:

正如@cdlane的评论所述,在不必要时将整个文件写入内存不是一个好的做法。而是逐行写入文件:

with open('C:/Users\Karan\Documents\\test.txt','r') as testFile, open('C:/Users\Karan\Documents\\newtext.txt','w') as newFile:
    for num, line in enumerate(testFile, 1):
        if num != 5:
            newFile.write(line)

我相信你的代码比一些答案更正确,尤其是在你使用enumerate()时。这里讨论的是文件打开以及可能的文件名字符串:

testFile_name = r"C:\Users\Karan\Documents\test.txt"
newFile_name = r"C:\Users\Karan\Documents\newtext.txt"

with open(testFile_name) as testFile:
    with open(newFile_name, 'w') as newFile:
        for number, line in enumerate(testFile, 1):
            if number != 5:
                newFile.write(line)

相关问题 更多 >