Python将用户输入多行写入文本文件的问题及修正
解决方案
先指出你代码里的几个核心问题:
- 两次输入都赋值给
s1,导致第一次输入被直接覆盖 - 仅将
s1添加到列表一次,第二个输入完全没存入列表 - 写入文件时用了
's1\n',这是固定字符串,不是引用变量s1的实际输入值 - 打开文件用
"w"模式会清空原有内容,若要实现追加功能,需改用"a"模式
下面是修正后的代码,实现先收集用户输入到列表,再将列表内容逐行追加到文件:
import os import sys def userfile(): # 初始化存储用户输入的列表 text = [] # 获取两次用户输入,分配独立变量避免覆盖 s1 = input("输入第1句话:") s2 = input("输入第2句话:") # 将两个输入都添加到列表 text.append(s1) text.append(s2) # 用"a"模式打开文件实现追加,同时用with语句自动管理文件关闭 file_path = os.path.join(sys.path[0], "sample2.txt") with open(file_path, "a", encoding="utf-8") as userfile: # 给每个输入内容加上换行符,保证逐行写入 lines = [line + "\n" for line in text] userfile.writelines(lines) # 读取文件验证结果 with open(file_path, "r", encoding="utf-8") as newfile: print(newfile.read()) def main(): userfile() if __name__ == "__main__": main()
关键细节说明:
- 正确引用变量:写入文件时直接使用变量名(比如
line),不要加引号,否则会变成固定字符串而非用户输入内容 - 追加模式选择:
"a"模式会将新内容追加到文件末尾;如果是首次写入文件,用"w"模式也可,但追加必须用"a" - with语句优势:无需手动调用
close(),系统会自动处理文件关闭,避免资源泄漏 - 换行处理:用户输入默认不带换行符,需手动添加
"\n",确保每行内容单独占一行
如果需要支持用户输入任意数量的内容,可以改成循环输入(直到用户输入空行停止):
import os import sys def userfile(): text = [] print("请输入内容,输入空行结束:") while True: line = input() if not line: # 输入空行时退出循环 break text.append(line) file_path = os.path.join(sys.path[0], "sample2.txt") with open(file_path, "a", encoding="utf-8") as userfile: userfile.writelines([line + "\n" for line in text]) with open(file_path, "r", encoding="utf-8") as newfile: print("文件内容:") print(newfile.read()) def main(): userfile() if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者ChosenLattice
相关产品推荐
相关产品推荐

