1, .exe .txt .ppt 等都是文件
2,打开文件
open() 这个函数里有很多参数,主要记住两个:
- r 以只读方式打开文件 f=open(r"C:\Users\goodb\Desktop\record.txt")
- w 以写入方式打开文件,会覆盖以存在的文件.
3,关闭文件 f.close()
4,文件的读取和定位:
1)读取
- read() 以字节为单位读取,若不设置参数,则会全部读取出来
- readline() 在文件中读取一整行,从指针位置向后读取,遇到\n结束
- list(f) 可以把文件整个内容放进列表里
- tell()可以告诉当前指针所在位置
2)定位
- seek(offset,from) 可以调整文件指针位置,表示从from偏移offset(自定义)字节 其中0表示文件起始位置,1表示文件当前位置,2代表文件末尾
- 汉字占了两个字节
- 将文件指针设置到文件起始位置,使用seek(0,0)即可
5,迭代读取文本文件的每一行
f.seek(0,0)
for each_line in f:
print(each_line)
6,文件的写入(确保打开模式之前有 w 或 a)
f=open(r"C:\Users\goodb\Desktop\record.txt",'w')
f.write("写的内容会直接传到打开的文件里面")
>>>16 #传入内容的总数
f.close()
7,
- f = open('E:/test.txt', 'w') # A
- f = open('E:\test.txt', 'w') # B
- f = open('E://test.txt', 'w') # C
- f = open('E:\\test.txt', 'w') # D
B不能打印文字 D是用反斜杠将\打印出来 ’\‘,‘/’均可
8,编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行内容打印到屏幕上。
def file_view(file_name, line_num):
# ,前面是文字,用''框起来,将后面打包放进前面,多个变量用()
print('文件%s的前%s的内容如下:\n' % (file_name, line_num))
f = open(file_name)
for i in range(int(line_num)): # input输入的是字符串,要强制转换成整形
print(f.readline(), end='') # 读取每行并换行
f.close() # 一定记得要关上
# 原来打开的文件与路径之间可以有文字,只要路径在r里面就行
file_name = input("请输入要打开的文件(C:\Users\Lenovo\Desktop\python\飞机游戏框架):")
line_num = input("请输入显示该文件前几行")
file_view(file_name, line_num)
注:input函数将输入的全转入字符串,所以r'' ''没意义,
用的是“/”,看清方向
C:/test.txt
9,用户可以随意输入需要显示的行数。(如输入13:21打印第13行到第21行,输入:21打印前21行,输入21:则打印从第21行开始到文件结尾所有内容)
def file_view(file_name, line_num):
if line_num.strip() == ':':#strip()函数用于删除字符串开头,结尾处
begin = '1'
end = '-1'
(begin, end) = line_num.split(':')#split(':')去除指定字符
if begin == '':#表示若:前面没有字符,则为begin
begin = '1'
if end == '':#表示若:后面没有字符,则为end
end = '-1'
if begin == '1' and end == '-1':
prompt = '的全文'
elif begin == '1':
prompt = '从开始到%s' % end#注意前面均用字符串表示
elif end == '-1':
prompt = '从%s到结束' % begin
else:
prompt = '从第%s行到第%s行' % (begin, end)
print('\n文件%s%s的内容如下:\n' % (file_name, prompt))
begin = int(begin) - 1
end = int(end)
lines = end - begin
f = open(file_name)
for i in range(begin): # 用于消耗掉begin之前的内容
f.readline()
if lines < 0:
print(f.read())#即一行,读取字节
else:
for j in range(lines):
print(f.readline(), end='')#文章读取一整行
f.close()
file_name = input(r'请输入要打开的文件(C:\\test.txt):')
line_num = input('请输入需要显示的行数【格式如 13:21 或 :21 或 21: 或 : 】:')
file_view(file_name, line_num)
10,编写一个程序,实现“全部替换”功能。
def file_replace(file_name, rep_word, new_word):
f_read = open(file_name)
content = []
count = 0#初始化
for eachline in f_read:#查找每行
if rep_word in eachline:
count = eachline.count(rep_word) #count感觉应该用这个(统计字符中某个字出现次数)
eachline = eachline.replace(rep_word, new_word)#replace函数(旧字符串替换成新字符串)
content.append(eachline) #在列表末尾添加新的对象
decide = input('\n文件 %s 中共有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:' \
% (file_name, count, rep_word, rep_word, new_word))
if decide in ['YES', 'Yes', 'yes']:#在这三项之中
f_write = open(file_name, 'w')#以写入方式打开
f_write.writelines(content)#将内容写入文件 参数是列表 .write()参数是字符串
f_write.close()
f_read.close()
file_name = input('请输入文件名:')
rep_word = input('请输入需要替换的单词或字符:')
new_word = input('请输入新的单词或字符:')
file_replace(file_name, rep_word, new_word)
11,write()与writelines()区别
1),writelines()中的参数只有一个。不同于write(),writelines()支持str同时也支持list写入
2),如果使用list写入txt文件,可以写入多行;如果使用str写入txt文件,则只能写入一行。
3),在list中的每个元素末尾必须加上’\n’的换行符,否则list中的各元素将写入一行之中
12,pickle的实质是利用算法将你的数据对象“腌制”成二进制文件存储起来。
13,
1)读取数据:pickle.dump(data,file)# 第一个参数是待存储的数据对象,第二个参数是目标存储的文件对象,注意用wb的模式打开文件。open('E:/my_list.pkl','wb')
2)存储数据:pickle.load(file) # 参数是目标存储的文件对象,注意要先使用'rb'的模式open文件
-
rb模式:以字节(二进制)方式读取文件中的数据
-
wb模式: 以字节(二进制)方式往文件中写入数据
-
ab模式: 以字节(二进制)方式往文件末尾追加写入数据
14
编写一个程序,这次要求使用pickle将文件(record.txt)里的对话按照以下要求腌制成不同文件(没错,是第29讲的内容小改,考考你自己能写出来吗?):piQM2$v
- 小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
- 小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
- 文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件(提示:文件中不同的对话间已经使用“==========”分割)
import pickle #用import引入pickle模块
def save_file(boy, girl, count):
file_name_boy = 'boy_' + str(count) + '.txt'# 文件名字命名
file_name_girl = 'girl_' + str(count) + '.txt'
boy_file = open(file_name_boy, 'wb') # 记得一定要加 b 吖
girl_file = open(file_name_girl, 'wb') # 记得一定要加 b 吖
pickle.dump(boy, boy_file)#使用dump保存数据
pickle.dump(girl, girl_file)
boy_file.close()
girl_file.close()
def split_file(file_name):
count = 1
boy = []
girl = []
f = open(file_name)
for each_line in f:
if each_line[:6] != '======':
(role, line_spoken) = each_line.split(':', 1)以:对字符串进行分割,分割次数是1
if role == '小甲鱼':
boy.append(line_spoken)
if role == '小客服':
girl.append(line_spoken)
else:
save_file(boy, girl, count)
boy = []
girl = []
count += 1
save_file(boy, girl, count)
f.close()
split_file('record.txt')
15,打开文件最后建议
with open ("C:/user/1.txt","r",encoding='utf-8') as f:
f.read()