鱼C论坛

 找回密码
 立即注册
查看: 1929|回复: 0

[学习笔记] A-13-文件操作练习

[复制链接]
发表于 2018-7-14 12:39:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 高渐飞 于 2018-7-16 15:17 编辑

昨天一时兴起,去搭了个个人博客。http://139.224.12.201/
24K纯白的建站小白,若丑勿怪,域名审核是真的伤(
附上今天的练习
  1. #coding: UTF-8

  2. #知识点总结

  3. #(1)python操作文件,详细打开方式和操作方法见 http://bbs.fishc.org/thread-45279-1-1.html(类似C)
  4. #(2)打开文件后要关闭, 关闭后才能将缓存的内容写进磁盘,不会丢失
  5. #(3)关于扩展名

  6. #操作练习

  7. #1.打开文件,并迭代打印文件对象(f)每一行的数据
  8. a = open('E:\\test\\text.txt','r')  #文件路径和打开方式都要加引号
  9. for each_line1 in a:
  10.     print(each_line1,end=" ")
  11. a.close()      #打开后,记得关闭


  12. #2.将对话分别分割并保存
  13. def split_file(file_name):    #分割文件
  14.     f = open(file_name)    #打开要分割的文件

  15.     boy = []        #设置中间缓冲 空列表
  16.     girl = []
  17.     count = 1

  18.     for each_line in f:
  19.         if each_line[:6] != '======':         #每段对话以====隔开
  20.             (role, line_spoken) = each_line.split(':', 1)   #以冒号为界限分割1条符串,详见
  21.             if role == '小甲鱼':           #如果冒号前面的内容为“小甲鱼”,则把后面的内容添加到boy列表
  22.                 boy.append(line_spoken)
  23.             if role == '小客服':
  24.                 girl.append(line_spoken)
  25.         else:                             #第count段内容已全部添加完毕,开始保存
  26.             save_file(boy, girl, count)

  27.             boy = []                   #列表初始化,准备下一次分割、保存
  28.             girl = []
  29.             count += 1

  30.     save_file(boy, girl, count)        #第三段文字后,无====,因此只进行了分割,未保存。此处进行保存操作

  31.     f.close()         #分割保存完毕,关闭文件

  32. def save_file(boy, girl, count):    #保存文件
  33.     file_name_boy = 'boy_' + str(count) + '.txt'     #设置保存文件的名称
  34.     file_name_girl = 'girl_' + str(count) + '.txt'

  35.     boy_file = open(file_name_boy, 'w')          #打开文件
  36.     girl_file = open(file_name_girl, 'w')

  37.     boy_file.writelines(boy)          #将列表boy(前面已完成添加)写入boy_file指向的文件
  38.     girl_file.writelines(girl)        #文件对象操作的详细文档见 http://bbs.fishc.org/thread-45279-1-1.html

  39.     boy_file.close()
  40.     girl_file.close()

  41. #调用函数,分割保存
  42. split_file('E:\\test\\record.txt')


  43. #3.替换文件内字符串
  44. def  file_replace(file1, old1, new1):
  45.     f = open('E:\\test\\' + str(file1) + '.txt')     #设定文件夹路径,只输入文件名即可打开指定文件夹下的文件
  46.     count = 0               #统计要替换的字符串个数
  47.     content = []

  48.     for  each_line in f:
  49.         count += each_line.count(old1)
  50.         each_line = each_line.replace(old1, new1)
  51.         content.append(each_line)
  52.     print("文件 %s 中共有 %d 个 【%s】" % (file + '.txt', count, old1) )
  53.     print("您确定要把所有的 【%s】 替换为 【%s】 吗?" % ( old1, new1 ) )    #输出格式原来是这样啊,学习了(笑)
  54.     judge = input('【YES/NO】: ')

  55.     if  judge == 'YES':
  56.         f_write = open('E:\\test\\' + str(file1) + '.txt', 'w')
  57.         f_write.writelines(content)
  58.         print("文件 %s 中的【%s】已被替换为【%s】" % (file + '.txt',old1,new1) )
  59.         f_write.close()

  60.     f.close()

  61. #调用函数,开始修改
  62. file = input("请输入文件名:")
  63. old = input("请输入需要替换的单词或字符:")
  64. new = input("请输入新的单词或字符:")

  65. file_replace(file, old, new)


  66. #4.比较用户输入的两个文件 如果不同,显示出所有不同处的行号与第一个不同字符的位置
  67. def  file_compare(file1, file2):
  68.     f1 = open('E:\\test\\' + str(file1) + '.txt')
  69.     f2 = open('E:\\test\\' + str(file2) + '.txt')
  70.     count_line = 0
  71.     count_char = 0
  72.     differ_line = []
  73.     differ_char = []

  74.     for  each_line1 in f1:
  75.         each_line2 = f2.readline()        #以第一行为例,f1的第一行读入,f2的第一行也写入
  76.         count_line += 1
  77.         if  each_line1 != each_line2:     #如果两行不一样,则把行号添加到列表line中
  78.             differ_line.append(count_line)
  79.             for  each_char in each_line1:   #对于第一行的每个字母遍历,
  80.                 count_char += 1      #字母个数计数
  81.                 if  each_char != each_line2[count_char - 1]:  #字母不一致时,把字母序号加到列表char中
  82.                     differ_char.append(count_char)
  83.                     break
  84.             count_char=0


  85.     f1.close()
  86.     f2.close()
  87.     differ = [differ_line, differ_char]    #列表嵌套列表,如[[1,2],[3,5]]
  88.     return differ


  89. file1 = input('请输入需要比较的第一个文件名: ')
  90. file2 = input('请输入需要比较的第二个文件名: ')

  91. differ = file_compare(file1, file2)
  92. length = len(differ[0])
  93. if  length == 0:
  94.     print('两个文件一样')
  95. else:
  96.     print('这两个文件共有 %d 行不同' % length)
  97.     for  each in range(length-1):
  98.         print( '第 %d 行, 第 %d 个字符开始不一样' % (differ[0][each], differ[1][each]) )


  99. #5.编写程序,接受用户的输入并保存为新的文件
  100. def  file_write(file_name4):
  101.     f = open('E:\\test\\' + str(file_name4) + '.txt', 'x')    #以x形式打开不存在的文件,即新建文件
  102.     print("请输入内容【单独输入':w'保存退出】:  ")

  103.     while  True:
  104.         file_content = input( )
  105.         if  file_content != ':w':
  106.             f.write('%s\n' % file_content)     #将输入的内容写入打开的文件
  107.         else:
  108.             break

  109.     f.close()

  110. file_name = input("请输入文件名: ")
  111. file_write(file_name)

  112. #6.指定显示文件的前几行
  113. def  file_print(file, n):
  114.     f = open('E:\\test\\' + str(file) + '.txt')   #打开文件
  115.     count = 0

  116.     for  each_line in f:
  117.         if  count == n:        #输出前n行
  118.             break
  119.         print(each_line)
  120.         count += 1

  121.     f.close()


  122. file = input("请输入要打开的文件: ")
  123. n = input("请输入需要显示该文件前几行: ")
  124. while  not n.isdigit():                    # n.isdigit检查n是否只是整数,是返回True,退出循环
  125.     n = input("输入格式错误, 请重新输入: ")
  126. n=int(n)
  127. file_print(file, n)

  128. #7.用户可以随意输入需要显示的行数
  129. def  file_print(file, range_line):
  130.     f = open('E:\\test\\' + str(file) + '.txt')
  131.     count = 0
  132.     range_line = range_line.partition(':')  #分割成三部分,类似split分成两部分
  133.                                             #比如"12:25",分割后成'12','.','25'三部分
  134.     length = len(range_line)                #http://www.runoob.com/python/att-string-partition.html


  135.     if  range_line[0] != '' and range_line[2] != '':
  136.         print('文件 %s 从第 %d 行到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line[0]), int(range_line[2]) ) )
  137.         for  each_line in range( int(range_line[0]) - 1 ):   #12-1=11,range(11)为0-11遍历
  138.             f.readline()                      #使指针指向range_line[0]起始点,便于输出
  139.         for  each_line in f:
  140.             if  count <= int( range_line[2] ) - int( range_line[0] ):   #count <= 25-12 输出
  141.                 print(each_line)
  142.                 count += 1
  143.             else:
  144.                 break
  145.     elif  range_line[0] == '' and range_line[2] != '':
  146.         print('文件 %s 从第开始到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line[2]) ) )
  147.         for  each_line in f:
  148.             if  count < int (range_line[2] ):     #从开始输出,省略指针跳转
  149.                 print(each_line)
  150.                 count += 1
  151.             else:
  152.                 break
  153.     elif  range_line[2] == '' and range_line[0] != '':
  154.         print('文件 %s 从第 %d 行到末尾的内容如下: ' % ( file + '.txt', int(range_line[0]) ) )
  155.         for  each_line in range( int(range_line[0]) - 1 ):
  156.             f.readline()
  157.         for  each_line in f:
  158.             print(each_line)
  159.     elif  length == 3 and range_line[0] == '' and range_line[2] == '':
  160.         print('文件 %s 全文的内容如下: ' % ( file + '.txt' ) )
  161.         for  each_line in f:
  162.               #count += 1
  163.               print(each_line)
  164.     f.close()

  165. file = input("请输入要打开的文件: ")
  166. range_line = input("请输入需要显示的格式【格式如 13:21 或 :21 或 21:】: ")
  167. file_print(file, range_line)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 16:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表