跳过主要内容

Python 怎么创建 TXT 文件?

只是想要一个 TXT 文件?直接在线创建 →

Python 创建 TXT 文件时,可以用 open() 的 "w" 模式打开文件,再调用 write() 写入文字。下面这段代码适用于 Python 3.10 及以上版本,生成的 notes.txt 位于当前工作目录。

with open("notes.txt", "w", encoding="utf-8") as f:
    f.write("你好\n")

方法一:用 open() 创建并写入 TXT

1. 确定保存位置

选一个能写入的目录。如果只写文件名,Python 会把它当作相对路径,从进程的当前工作目录开始查找。用 IDE 或定时任务运行脚本时,工作目录可能和脚本所在位置不同。找不到输出文件时,先用 Path.cwd() 确认运行环境,再决定是否使用明确的输出目录。

2. 以写入模式打开文件

用 with open(...) 管理文件。缩进块结束后,Python 会关闭文件,块里报错时也会执行关闭。"w" 打开文件时就会截断同名旧文件,即使还没有执行 write()。有旧稿需要保留时,先换名字或用 "x" 模式。

3. 写入字符串

在缩进块里调用 f.write(...)。write() 接受字符串,返回写入的字符数。需要换行就在字符串里加 \n。等 with 代码块结束后,再用编辑器打开文件核对内容。只写一个字符串时,也可以用下面的 Path.write_text()。

w、a、x 三种模式怎么选?

模式同名文件已存在文件不存在常用场景
w清空后写入创建每次生成最新报表
a从文件末尾追加创建逐条记录任务日志
x报 FileExistsError创建避免覆盖已有文档
with open("activity.txt", "a", encoding="utf-8") as f:
    f.write("本次导出完成\n")

运行两次会写入两条日志。如果旧文件最后一行没有换行,第一次追加的文字会接在旧内容后面。外部软件生成的 TXT 还可能使用不同的编码,追加前要确认整个文件的编码一致。

写入多行文字

可以多次调用 write(),也可以把一组字符串传给 writelines()。writelines() 不会为每一项自动补换行,需要在各行末尾写上 \n。用 print(..., file=f) 时则默认在输出末尾补一个换行,适合把多个值拼成一行。

with open("tasks.txt", "w", encoding="utf-8") as f:
    f.write("今日事项\n")
    f.writelines(["发送初稿\n", "整理笔记\n"])
    print("事项总数", 2, file=f)

方法二:用 pathlib 写入文件

Path.write_text() 会打开文件、写入字符串并关闭文件。如果文件存在,它会替换原有内容。使用路径对象拼接目录和文件名,脚本可以在不同系统上使用。

from pathlib import Path

Path("notes.txt").write_text("你好", encoding="utf-8")

需要输出到多层目录时,先创建父目录。parents=True 让它补建缺少的上级目录,exist_ok=True 允许目标目录已经存在。遇到同名普通文件时,仍需改名或调整路径。

from pathlib import Path

output = Path("exports") / "daily" / "notes.txt"
output.parent.mkdir(parents=True, exist_ok=True)
output.write_text("你好\n", encoding="utf-8")

写入中文乱码怎么办?

新建文件时直接写 encoding="utf-8",避免依赖操作系统或 Python 版本的默认编码。接收端也要按 UTF-8 打开。如果对方的旧工具明确要求带签名的 UTF-8,则在新文件上用 encoding="utf-8-sig"。它会在开头写入 BOM。接收端要求首字节必须是普通正文时,通常选择不带 BOM 的 UTF-8。

换行和编码可以分别指定。默认情况下,写入时的 \n 会按系统的换行约定处理。如果输出必须跨平台保持相同字节,可以用 newline="\n" 固定为 LF,或用 newline="\r\n" 固定为 CRLF。需要 CRLF 时,在传给 write() 的字符串里仍写 \n,由 Python 完成转换。

with open("legacy-import.txt", "w", encoding="utf-8-sig", newline="\r\n") as f:
    f.write("姓名\n张三\n")

如果已有文件是 GBK,要先按原编码读出正确文字,再另存为 UTF-8。只改扩展名或用错误编码读入再保存,都不能修复原文字。行尾相关的问题可以参考 CRLF 和 LF 的区别。

常见报错怎么查?

  • FileNotFoundError:写入时常见原因是父目录不存在。核对目录层级,再创建缺少的目录。
  • PermissionError:确认目录允许当前用户写入,并检查文件是否被另一个程序占用。可以先换到自己有写入权限的文件夹试一次。
  • FileExistsError:使用了 x 且同名文件已存在。换一个文件名,或在确实要替换旧内容时才改成 w。
  • UnicodeEncodeError:当前编码无法表示某个字符。中文、外文和表情混排的文本通常用 UTF-8。导入老系统时,需要按它明确支持的编码准备内容。

不写代码也能生成 TXT

  1. 打开本页下方的编辑器,输入或粘贴文字。
  2. 填写文件名,按接收端的要求选择编码和换行符。
  3. 下载文件。要检查下载结果,可以查看 Windows 新建和打开 TXT 或 Mac 处理 TXT 的方法。

常见问题

怎么新建一个空白文件?

用 x 模式打开后直接退出代码块。采用 UTF-8 时,这段代码会生成零字节文件。如果同名文件已存在,Python 会报错并保留原文件。

with open("empty.txt", "x", encoding="utf-8"):
    pass

write() 会自动换行吗?

不会。想在哪换行,就在字符串对应位置加 \n。使用 print(..., file=f) 时,默认会在每次输出末尾加一个换行。

为什么运行完脚本,文件夹里找不到 TXT?

先确认看到的是进程的工作目录。如果用相对路径运行脚本,终端所在目录和脚本目录可能不同。用 Path.cwd() 查看工作目录,再到相应路径下找文件。

参考资料

在线创建 TXT 文件

字符
0
词数
0
行数
0
字节
0

文字只在你的浏览器里处理,不会上传到服务器。