日常练习:文件操作
01:一般文件操作
①打开文件
用open()函数打开文件,返回文件对象。其中name表示文件名,mode表示打开方式。
<variable> = open(<name>, <mode>)
打开方式为:
- r: 只读,文件指针将会放在文件的开头;
- w:只写,如果文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除;如果该文件不存在,创建新文件;
- a: 打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾;如果该文件不存在,创建新文件进行写入;
- rb: 只读二进制文件,一般用于非文本文件如图片等;
- wb: 只写二进制文件,一般用于非文本文件如图片等;
- ab: 以二进制格式打开一个文件用于追加;
- w+: 打开一个文件用于读写。
注:使用open()一定要保证文件是关闭状态。
②读写文件
先看读文件,其中encoding表示编码方式,一般有:ASCII格式、Unicode码、UTF-8码、GBK编码等。
file = open('poem.txt', 'r', encoding = 'utf-')
# 读取整个文本的字符串
data = file.read()
print(data)
# 读取内容的下一行内容
file = open('poem.txt', 'r', encoding = 'utf-')
data1 = file.readline()
print(data1)
# 读取内容为列表,每个元素为一行字符串
file = open('poem.txt', 'r', encoding = 'utf-')
data2 = file.readlines()
print(data2)
输出:
再看写文件
# 1. 追加方式写入
file = open("poem.txt", 'a+', encoding = 'utf8')
str1 = '字符串1'
str2 = '字符串2'
# write()写一句
file.write(str1)
file.write(str2)
# 关闭文件
file.close()
# 2.新建文件并写入
new_file = open('new.txt', 'w', encoding = 'utf8')
strs = ['字符串1','字符串2']
# writeline()写多句
new_file.writelines(strs)
new_file.close()
file = open('poem.txt', 'r', encoding = 'utf8')
content = file.read()
print(content)
new_file = open('new.txt', 'r', encoding = 'utf8')
new_content = new_file.read()
print(new_content)
输出:
③关闭文件
- file.close():关闭文件;
可使用try-except-finally异常捕获语句。 - file.flush():刷新文件内部缓冲;
try:
#文件操作
except :
#异常处理
finally:
file.close()
④循环遍历文件
分别用read()和readlines()遍历:
file = open("new.txt", 'r', encoding = 'utf8')
# 每一行为一个元素
for line in file.readlines():
print(line)
file.close()
file = open('new.txt', 'r', encoding = 'utf8')
content = file.read()
# 每个字符为一个元素
for line in content:
print(line)
file.close()
输出:
02:csv文件操作
# 导入csv模块
import csv
# 创建csv文件对象, newline避免出行新行
data = open('data.csv', 'w', encoding = 'utf8', newline = '')
# 写入文件
writer = csv.writer(data)
# 以列表类型写入一行
writer.writerow(['姓名', '年龄', '学号'])
writer.writerow(['小红', '15', '1'])
writer.writerow(['小兰', '16', '2'])
data.close()
# 读取文件内容
data = open('data.csv', 'r', encoding = 'utf8')
reader = csv.reader(data)
for line in reader:
print(line[0], line[1], line[2])
data.close()