Python用ftplib向FTP服务器txt文件追加内容报AttributeError如何解决
报错诱因
- ftplib的
storlines方法要求传入的第二个参数必须是类文件对象,该对象需要实现readline方法用来逐行读取内容上传。你直接传入了字符串类型的new_line,字符串没有readline方法,因此触发AttributeError。 - 你使用的
STOR指令是直接覆盖原文件内容,就算参数类型调整正确,也无法实现追加内容的需求,FTP协议中追加内容需要用APPE指令。
修正后的实现代码
import ftplib from io import BytesIO # 替换为你自己的FTP连接信息 HOST = "xxx.xxx.xxx.xxx" PORT = 21 USER = "your_username" PASSWD = "your_password" ftp = ftplib.FTP() ftp.connect(host=HOST, port=PORT) ftp.login(user=USER, passwd=PASSWD) # 提前将待写入的内容编码为字节 new_line = '\n this is a new line'.encode('utf-8') # 将字节内容包装为支持readline方法的类文件对象 file_obj = BytesIO(new_line) # 使用APPE指令实现内容追加 ftp.storlines('APPE test.txt', file_obj) file_obj.close() ftp.quit()
补充说明
- 如果需要写入中文等非ASCII内容,注意指定编码格式,避免出现乱码,例如
new_line = '\n 这是新增的中文行'.encode('gbk')或者encode('utf-8'),需要和原文件的编码格式保持一致。 - 所有操作完成后主动关闭FTP连接,避免不必要的资源占用。
内容的提问来源于stack exchange,提问作者name
相关产品推荐
相关产品推荐

