搞Python也有些年头了,要说最基础但又绕不开的,肯定有文件写入这一项。别看它简单,里面门道还真不少,稍微不注意,就可能掉坑里。今天我就来好好唠唠,Python怎么写入文件,各种姿势都给你安排上。
最最基础的,莫过于open()
函数搭配write()
方法了。打开文件,指定写入模式(”w”),然后咔咔一顿write()
,齐活!但注意啊,”w”模式是会清空文件内容的,如果你只想追加内容,得用”a”模式。
“`python
写入模式,会清空文件内容
f = open(“my_file.txt”, “w”)
f.write(“Hello, world!\n”)
f.close()
追加模式,不会清空文件内容
f = open(“my_file.txt”, “a”)
f.write(“This is a new line.\n”)
f.close()
“`
看起来很直接吧?但实际操作中,问题就来了:万一写入过程中出了错,文件没关掉,那可就麻烦了!文件可能损坏,数据可能丢失。所以,更推荐使用with
语句,它能自动帮你管理文件的打开和关闭,保证程序的健壮性。
python
with open("my_file.txt", "w") as f:
f.write("Hello, world! using with statement.\n")
是不是感觉清爽多了?
好了,基本操作搞定了,再来说说写入不同类型的数据。比如,你要写入数字或者其他非字符串类型,就得先转换成字符串。这也没啥,用str()
函数搞定。
python
number = 123
with open("my_file.txt", "w") as f:
f.write(str(number) + "\n")
但如果你的数据是列表或者字典,想以更结构化的方式写入,比如写入CSV文件,那就得借助csv
模块了。这玩意儿贼好使,能帮你轻松搞定CSV文件的读写。
“`python
import csv
data = [
[“Name”, “Age”, “City”],
[“Alice”, “30”, “New York”],
[“Bob”, “25”, “London”]
]
with open(“my_file.csv”, “w”, newline=””) as f:
writer = csv.writer(f)
writer.writerows(data)
“`
这里newline=""
是为了防止在Windows系统下出现空行,算是个小技巧。
还有个更高级的玩法,用json
模块写入JSON文件。JSON格式的数据在Web开发中非常常见,用json
模块可以方便地将Python对象序列化为JSON字符串,然后写入文件。
“`python
import json
data = {
“name”: “Charlie”,
“age”: 35,
“city”: “Paris”
}
with open(“my_file.json”, “w”) as f:
json.dump(data, f, indent=4) #indent=4是为了美观,可以省略
“`
json.dump()
函数可以将Python对象写入JSON文件,indent
参数可以控制JSON文件的缩进,让它更易读。
说到写入,字符编码也是个绕不开的话题。不同的操作系统和编辑器使用的字符编码可能不一样,如果不指定字符编码,可能会出现乱码问题。所以,在打开文件时,最好显式指定字符编码,比如UTF-8。
python
with open("my_file.txt", "w", encoding="utf-8") as f:
f.write("你好,世界!\n")
UTF-8是一种通用的字符编码,支持各种语言的字符,推荐使用。
另外,如果你要写入大量数据,一次性写入可能会比较慢。可以考虑使用缓冲区,先将数据写入缓冲区,然后再一次性写入文件。这样可以减少IO操作的次数,提高写入效率。
python
with open("my_file.txt", "w") as f:
buffer = []
for i in range(10000):
buffer.append(str(i) + "\n")
f.writelines(buffer)
writelines()
方法可以一次性写入多个字符串,效率比write()
高。
再来聊聊一些常见的坑。
-
文件路径错误: 这是新手常犯的错误。一定要确保文件路径是正确的,否则会抛出
FileNotFoundError
异常。可以使用绝对路径,也可以使用相对路径。相对路径是相对于当前工作目录的路径,可以使用os.getcwd()
函数获取当前工作目录。 -
权限问题: 如果你没有写入权限,也会抛出
PermissionError
异常。要确保你有足够的权限才能写入文件。 -
文件被占用: 如果文件被其他程序占用,也会导致写入失败。要先关闭占用文件的程序,然后再进行写入操作。
-
磁盘空间不足: 如果磁盘空间不足,写入操作也会失败。要确保磁盘有足够的空间才能写入文件。
还有一些高级技巧,比如使用mmap
模块将文件映射到内存中,然后直接在内存中修改文件内容。这种方式适用于大文件的读写,效率非常高。但使用mmap
模块需要小心,因为直接在内存中修改文件内容可能会导致数据损坏。
再比如,可以使用logging
模块将日志信息写入文件。logging
模块提供了丰富的日志记录功能,可以方便地记录程序的运行状态。
总而言之,Python怎么写入文件,看似简单,实则有很多细节需要注意。掌握了这些技巧,才能写出高效、健壮的Python程序。希望我的经验能帮到你,少走弯路!加油,Pythoner!
评论(0)