|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 高渐飞 于 2018-7-16 15:17 编辑
昨天一时兴起,去搭了个个人博客。http://139.224.12.201/
24K纯白的建站小白,若丑勿怪,域名审核是真的伤( )
附上今天的练习
- #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.替换文件内字符串
- def file_replace(file1, old1, new1):
- f = open('E:\\test\\' + str(file1) + '.txt') #设定文件夹路径,只输入文件名即可打开指定文件夹下的文件
- count = 0 #统计要替换的字符串个数
- content = []
- for each_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】: ')
- if judge == '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.比较用户输入的两个文件 如果不同,显示出所有不同处的行号与第一个不同字符的位置
- def file_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 = []
- for each_line1 in f1:
- each_line2 = f2.readline() #以第一行为例,f1的第一行读入,f2的第一行也写入
- count_line += 1
- if each_line1 != each_line2: #如果两行不一样,则把行号添加到列表line中
- differ_line.append(count_line)
- for each_char in each_line1: #对于第一行的每个字母遍历,
- count_char += 1 #字母个数计数
- if each_char != each_line2[count_char - 1]: #字母不一致时,把字母序号加到列表char中
- differ_char.append(count_char)
- break
- count_char=0
- f1.close()
- f2.close()
- differ = [differ_line, differ_char] #列表嵌套列表,如[[1,2],[3,5]]
- return differ
- file1 = input('请输入需要比较的第一个文件名: ')
- file2 = input('请输入需要比较的第二个文件名: ')
- differ = file_compare(file1, file2)
- length = len(differ[0])
- if length == 0:
- print('两个文件一样')
- else:
- print('这两个文件共有 %d 行不同' % length)
- for each in range(length-1):
- print( '第 %d 行, 第 %d 个字符开始不一样' % (differ[0][each], differ[1][each]) )
- #5.编写程序,接受用户的输入并保存为新的文件
- def file_write(file_name4):
- f = open('E:\\test\\' + str(file_name4) + '.txt', 'x') #以x形式打开不存在的文件,即新建文件
- print("请输入内容【单独输入':w'保存退出】: ")
- while True:
- file_content = input( )
- if file_content != ':w':
- f.write('%s\n' % file_content) #将输入的内容写入打开的文件
- else:
- break
- f.close()
- file_name = input("请输入文件名: ")
- file_write(file_name)
- #6.指定显示文件的前几行
- def file_print(file, n):
- f = open('E:\\test\\' + str(file) + '.txt') #打开文件
- count = 0
- for each_line in f:
- if count == n: #输出前n行
- break
- print(each_line)
- count += 1
- f.close()
- file = input("请输入要打开的文件: ")
- n = input("请输入需要显示该文件前几行: ")
- while not n.isdigit(): # n.isdigit检查n是否只是整数,是返回True,退出循环
- n = input("输入格式错误, 请重新输入: ")
- n=int(n)
- file_print(file, n)
- #7.用户可以随意输入需要显示的行数
- def file_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
- if range_line[0] != '' and range_line[2] != '':
- print('文件 %s 从第 %d 行到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line[0]), int(range_line[2]) ) )
- for each_line in range( int(range_line[0]) - 1 ): #12-1=11,range(11)为0-11遍历
- f.readline() #使指针指向range_line[0]起始点,便于输出
- for each_line in f:
- if count <= int( range_line[2] ) - int( range_line[0] ): #count <= 25-12 输出
- print(each_line)
- count += 1
- else:
- break
- elif range_line[0] == '' and range_line[2] != '':
- print('文件 %s 从第开始到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line[2]) ) )
- for each_line in f:
- if count < int (range_line[2] ): #从开始输出,省略指针跳转
- print(each_line)
- count += 1
- else:
- break
- elif range_line[2] == '' and range_line[0] != '':
- print('文件 %s 从第 %d 行到末尾的内容如下: ' % ( file + '.txt', int(range_line[0]) ) )
- for each_line in range( int(range_line[0]) - 1 ):
- f.readline()
- for each_line in f:
- print(each_line)
- elif length == 3 and range_line[0] == '' and range_line[2] == '':
- print('文件 %s 全文的内容如下: ' % ( file + '.txt' ) )
- for each_line in f:
- #count += 1
- print(each_line)
- f.close()
- file = input("请输入要打开的文件: ")
- range_line = input("请输入需要显示的格式【格式如 13:21 或 :21 或 21:】: ")
- file_print(file, range_line)
复制代码 |
|