A-13-文件操作练习
本帖最后由 高渐飞 于 2018-7-16 15:17 编辑昨天一时兴起,去搭了个个人博客。http://139.224.12.201/
24K纯白的建站小白,若丑勿怪,域名审核是真的伤({:5_104:} )
附上今天的练习
#coding: UTF-8
#知识点总结
#(1)python操作文件,详细打开方式和操作方法见 http://bbs.fishc.org/thread-45279-1-1.html(类似C)
#(2)打开文件后要关闭, 关闭后才能将缓存的内容写进磁盘,不会丢失
#(3)关于扩展名
#操作练习
#1.打开文件,并迭代打印文件对象(f)每一行的数据
a = open('E:\\test\\text.txt','r')#文件路径和打开方式都要加引号
for each_line1 in a:
print(each_line1,end=" ")
a.close() #打开后,记得关闭
#2.将对话分别分割并保存
def split_file(file_name): #分割文件
f = open(file_name) #打开要分割的文件
boy = [] #设置中间缓冲 空列表
girl = []
count = 1
for each_line in f:
if each_line[:6] != '======': #每段对话以====隔开
(role, line_spoken) = each_line.split(':', 1) #以冒号为界限分割1条符串,详见
if role == '小甲鱼': #如果冒号前面的内容为“小甲鱼”,则把后面的内容添加到boy列表
boy.append(line_spoken)
if role == '小客服':
girl.append(line_spoken)
else: #第count段内容已全部添加完毕,开始保存
save_file(boy, girl, count)
boy = [] #列表初始化,准备下一次分割、保存
girl = []
count += 1
save_file(boy, girl, count) #第三段文字后,无====,因此只进行了分割,未保存。此处进行保存操作
f.close() #分割保存完毕,关闭文件
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, 'w') #打开文件
girl_file = open(file_name_girl, 'w')
boy_file.writelines(boy) #将列表boy(前面已完成添加)写入boy_file指向的文件
girl_file.writelines(girl) #文件对象操作的详细文档见 http://bbs.fishc.org/thread-45279-1-1.html
boy_file.close()
girl_file.close()
#调用函数,分割保存
split_file('E:\\test\\record.txt')
#3.替换文件内字符串
deffile_replace(file1, old1, new1):
f = open('E:\\test\\' + str(file1) + '.txt') #设定文件夹路径,只输入文件名即可打开指定文件夹下的文件
count = 0 #统计要替换的字符串个数
content = []
foreach_line in f:
count += each_line.count(old1)
each_line = each_line.replace(old1, new1)
content.append(each_line)
print("文件 %s 中共有 %d 个 【%s】" % (file + '.txt', count, old1) )
print("您确定要把所有的 【%s】 替换为 【%s】 吗?" % ( old1, new1 ) ) #输出格式原来是这样啊,学习了(笑)
judge = input('【YES/NO】: ')
ifjudge == 'YES':
f_write = open('E:\\test\\' + str(file1) + '.txt', 'w')
f_write.writelines(content)
print("文件 %s 中的【%s】已被替换为【%s】" % (file + '.txt',old1,new1) )
f_write.close()
f.close()
#调用函数,开始修改
file = input("请输入文件名:")
old = input("请输入需要替换的单词或字符:")
new = input("请输入新的单词或字符:")
file_replace(file, old, new)
#4.比较用户输入的两个文件 如果不同,显示出所有不同处的行号与第一个不同字符的位置
deffile_compare(file1, file2):
f1 = open('E:\\test\\' + str(file1) + '.txt')
f2 = open('E:\\test\\' + str(file2) + '.txt')
count_line = 0
count_char = 0
differ_line = []
differ_char = []
foreach_line1 in f1:
each_line2 = f2.readline() #以第一行为例,f1的第一行读入,f2的第一行也写入
count_line += 1
ifeach_line1 != each_line2: #如果两行不一样,则把行号添加到列表line中
differ_line.append(count_line)
foreach_char in each_line1: #对于第一行的每个字母遍历,
count_char += 1 #字母个数计数
ifeach_char != each_line2:#字母不一致时,把字母序号加到列表char中
differ_char.append(count_char)
break
count_char=0
f1.close()
f2.close()
differ = #列表嵌套列表,如[,]
return differ
file1 = input('请输入需要比较的第一个文件名: ')
file2 = input('请输入需要比较的第二个文件名: ')
differ = file_compare(file1, file2)
length = len(differ)
iflength == 0:
print('两个文件一样')
else:
print('这两个文件共有 %d 行不同' % length)
foreach in range(length-1):
print( '第 %d 行, 第 %d 个字符开始不一样' % (differ, differ) )
#5.编写程序,接受用户的输入并保存为新的文件
deffile_write(file_name4):
f = open('E:\\test\\' + str(file_name4) + '.txt', 'x') #以x形式打开不存在的文件,即新建文件
print("请输入内容【单独输入':w'保存退出】:")
whileTrue:
file_content = input( )
iffile_content != ':w':
f.write('%s\n' % file_content) #将输入的内容写入打开的文件
else:
break
f.close()
file_name = input("请输入文件名: ")
file_write(file_name)
#6.指定显示文件的前几行
deffile_print(file, n):
f = open('E:\\test\\' + str(file) + '.txt') #打开文件
count = 0
foreach_line in f:
ifcount == n: #输出前n行
break
print(each_line)
count += 1
f.close()
file = input("请输入要打开的文件: ")
n = input("请输入需要显示该文件前几行: ")
whilenot n.isdigit(): # n.isdigit检查n是否只是整数,是返回True,退出循环
n = input("输入格式错误, 请重新输入: ")
n=int(n)
file_print(file, n)
#7.用户可以随意输入需要显示的行数
deffile_print(file, range_line):
f = open('E:\\test\\' + str(file) + '.txt')
count = 0
range_line = range_line.partition(':')#分割成三部分,类似split分成两部分
#比如"12:25",分割后成'12','.','25'三部分
length = len(range_line) #http://www.runoob.com/python/att-string-partition.html
ifrange_line != '' and range_line != '':
print('文件 %s 从第 %d 行到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line), int(range_line) ) )
foreach_line in range( int(range_line) - 1 ): #12-1=11,range(11)为0-11遍历
f.readline() #使指针指向range_line起始点,便于输出
foreach_line in f:
ifcount <= int( range_line ) - int( range_line ): #count <= 25-12 输出
print(each_line)
count += 1
else:
break
elifrange_line == '' and range_line != '':
print('文件 %s 从第开始到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line) ) )
foreach_line in f:
ifcount < int (range_line ): #从开始输出,省略指针跳转
print(each_line)
count += 1
else:
break
elifrange_line == '' and range_line != '':
print('文件 %s 从第 %d 行到末尾的内容如下: ' % ( file + '.txt', int(range_line) ) )
foreach_line in range( int(range_line) - 1 ):
f.readline()
foreach_line in f:
print(each_line)
eliflength == 3 and range_line == '' and range_line == '':
print('文件 %s 全文的内容如下: ' % ( file + '.txt' ) )
foreach_line in f:
#count += 1
print(each_line)
f.close()
file = input("请输入要打开的文件: ")
range_line = input("请输入需要显示的格式【格式如 13:21 或 :21 或 21:】: ")
file_print(file, range_line)
页:
[1]