Python 3中'str'对象无seek属性错误原因咨询
解决AttributeError: 'str' object has no attribute 'seek'的问题
嘿,刚入门Python 3遇到这种问题很正常,我来帮你捋清楚~你看到的这个错误核心原因很明确:你把字符串类型的文件名当成了文件对象来调用seek()方法。seek()是专门给打开后的文件句柄用的,可不是给文件名这种字符串用的哦。
先看你贴出来的代码片段,目前还没完成文件打开的关键步骤,我们一步步拆解问题:
问题根源分析
你的代码只做了命令行参数的解析:
from sys import argv script, from_file, to_file=argv print(f"Are you sure that you want to copy {from_fi") # 这里还有语法小错误
但要操作文件内容,必须先通过open()函数打开文件,拿到真正的文件对象之后,才能调用seek()、read()这类文件操作方法。你之前大概率是直接写了from_file.seek(...),但from_file只是你从命令行拿到的文件名字符串,不是文件对象,所以才会触发这个AttributeError。
另外你的print语句还有两个小问题:from_fi是拼写错误(应该是from_file),而且字符串没闭合,正确写法应该是:
print(f"Are you sure that you want to copy {from_file} to {to_file}?")
正确的实现方案(包含seek的用法)
如果你想用seek()来操作文件指针(比如移动到文件开头或末尾),得先打开文件拿到句柄,这里用Python推荐的with语句来自动管理文件资源:
from sys import argv script, from_file, to_file = argv # 打开源文件读取内容 with open(from_file, 'r') as source_file: # 示例seek的用法:移到文件开头(其实默认就是开头,这里只是演示) source_file.seek(0) file_content = source_file.read() # 打开目标文件,以追加模式把内容写到末尾 with open(to_file, 'a') as target_file: target_file.write(file_content) print(f"搞定!已经把{from_file}的内容追加到{to_file}末尾啦~")
几个关键细节:
with open(...) as 变量名:这种写法会自动帮你关闭文件,不用担心忘记关文件导致资源泄漏。seek()的参数:seek(0)是移到文件开头,seek(0, 2)是直接跳到文件末尾(第二个参数2表示参照文件末尾计算偏移)。不过如果只是读取整个源文件,其实不需要额外调用seek(0),因为打开文件后指针默认就在开头。- 如果你只是想实现“复制到另一个文件末尾”,用追加模式
'a'打开目标文件就可以,这也是你提到的简单方法,而seek()更多是用来精细控制文件指针位置的场景。
内容的提问来源于stack exchange,提问作者tituscat
相关产品推荐
相关产品推荐

