鱼C论坛

 找回密码
 立即注册
查看: 1721|回复: 2

[技术交流] python 029 对文件进行操作

[复制链接]
发表于 2018-6-25 12:40:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 风不会停息 于 2018-7-20 15:56 编辑

5个动动手程序:

  1. def  file_write(file_name):
  2.     f = open('python_study\\' + str(file_name) + '.txt', 'x')
  3.     print("请输入内容【单独输入':w'保存退出】:  ")

  4.     while  True:
  5.         file_content = input( )
  6.         if  file_content != ':w':
  7.             f.write('%s\n' % file_content)
  8.         else:
  9.             break

  10.     f.close()

  11. file_name = input("请输入文件名: ")
  12. file_write(file_name)
复制代码

  1. def  file_compare(file1, file2):
  2.     f1 = open('python_study\\' + str(file1) + '.txt')
  3.     f2 = open('python_study\\' + str(file2) + '.txt')
  4.     count_line = 0
  5.     count_char = 0
  6.     differ_line = []
  7.     differ_char = []

  8.     for  each_line1 in f1:
  9.         each_line2 = f2.readline()
  10.         count_line += 1
  11.         if  each_line1 != each_line2:
  12.             differ_line.append(count_line)
  13.             for  each_char in each_line1:
  14.                 count_char += 1
  15.                 if  each_char != each_line2[count_char - 1]:
  16.                     differ_char.append(count_char)
  17.                     break

  18.             count_char = 0

  19.     f1.close()
  20.     f2.close()
  21.     differ = [differ_line, differ_char]
  22.     return differ


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

  25. differ = file_compare(file1, file2)
  26. length = len(differ[0])
  27. if  length == 0:
  28.     print('两个文件一样')
  29. else:
  30.     print('这两个文件共有 %d 处不同' % length)
  31.     for  each in range(length):
  32.         print( '第 %d 行, 第 %d 个字符开始不一样' % (differ[0][each], differ[1][each]) )
复制代码


  1. def  file_print(file, n):
  2.     f = open('python_study\\' + str(file) + '.txt')
  3.     count = 0
  4.    
  5.     for  each_line in f:
  6.         if  count == n:
  7.             break
  8.         print(each_line)
  9.         count += 1

  10.     f.close()


  11. file = input("请输入要打开的文件: ")
  12. n = input("请输入需要显示该文件前几行: ")
  13. while  not n.isdigit():
  14.     n = input("输入格式错误, 请重新输入: ")
  15.    
  16. n = int(n)
  17. file_print(file, n)
复制代码


  1. def  file_print(file, range_line):
  2.     f = open('D:\\python\\python_study\\' + str(file) + '.txt')
  3.     count = 0
  4.     range_line = range_line.partition(':')
  5.    
  6.     length = len(range_line)
  7.    
  8.    
  9.     if  range_line[0] != '' and range_line[2] != '':
  10.         print('文件 %s 从第 %d 行到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line[0]), int(range_line[2]) ) )
  11.         for  each_line in range( int(range_line[0]) - 1 ):
  12.             f.readline()
  13.         for  each_line in f:
  14.             if  count <= int( range_line[2] ) - int( range_line[0] ):
  15.                 print(each_line)
  16.                 count += 1
  17.             else:
  18.                 break
  19.     elif  range_line[0] == '' and range_line[2] != '':
  20.         print('文件 %s 从第开始到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line[2]) ) )     
  21.         for  each_line in f:
  22.             if  count == int (range_line[2] ):
  23.                 break
  24.             else:
  25.                 print(each_line)
  26.                 count += 1
  27.     elif  range_line[2] == '' and range_line[0] != '':
  28.         print('文件 %s 从第 %d 行到末尾的内容如下: ' % ( file + '.txt', int(range_line[0]) ) )
  29.         for  each_line in range( int(range_line[0]) - 1 ):
  30.             f.readline()
  31.         for  each_line in f:
  32.             print(each_line)
  33.     elif  length == 3 and range_line[0] == '' and range_line[2] == '':
  34.         print('文件 %s 全文的内容如下: ' % ( file + '.txt' ) )
  35.         for  each_line in f:
  36.               count += 1
  37.               print(each_line)
  38.     f.close()

  39. file = input("请输入要打开的文件: ")
  40. range_line = input("请输入需要显示的格式【格式如 13:21 或 :21 或 21:】: ")
  41. file_print(file, range_line)
复制代码


  1. def  file_replace(file, old, new):
  2.     f = open('D:\\python\\python_study\\' + str(file) + '.txt')
  3.     count = 0
  4.     content = []
  5.    
  6.     for  each_line in f:
  7.         count += each_line.count(old)
  8.         each_line = each_line.replace(old, new)
  9.         content.append(each_line)
  10.     print("文件 %s 中共有 %d 个 【%s】" % (file + '.txt', count, old) )
  11.     print("您确定要把所有的 【%s】 替换为 【%s】 吗?" % ( old, new ) )
  12.     judge = input('【YES/NO】: ')

  13.     if  judge == 'YES':
  14.         f_write = open('D:\\python\\python_study\\' + str(file) + '.txt', 'w')
  15.         f_write.writelines(content)
  16.         f_write.close()

  17.     f.close()


  18. file = input("请输入文件名: ")
  19. old = input("请输入需要替换的单词或字符: ")
  20. new = input("请输入新的单词或字符: ")
  21. file_replace(file, old, new)
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-7-14 20:07:02 | 显示全部楼层
兄dei,感谢你无私的分享。
第二个动手做一做程序运行时,发现了两个小错误,
(1)count_char 在循环后为初始化,导致了IndexError: string index out of range。改正后代码如下
  1.   for  each_line1 in f1:
  2.         each_line2 = f2.readline()        #以第一行为例,f1的第一行读入,f2的第一行也写入
  3.         count_line += 1
  4.         if  each_line1 != each_line2:     #如果两行不一样,则把行号添加到列表line中
  5.             differ_line.append(count_line)
  6.             for  each_char in each_line1:   #对于第一行的每个字母遍历,
  7.                 count_char += 1      #字母个数计数
  8.                 if  each_char != each_line2[count_char - 1]:  #字母不一致时,把字母序号加到列表char中
  9.                     differ_char.append(count_char)
  10.                     break
  11.             count_char=0
  12.          
复制代码

(2)最后I遍历输出时,长度未减一导致了IndexError: string index out of range。改正后代码如下
  1. differ = file_compare(file1, file2)
  2. length = len(differ[0])
  3. if  length == 0:
  4.     print('两个文件一样')
  5. else:
  6.     print('这两个文件共有 %d 行不同' % length)
  7.     for  each in range(length-1):
  8.         print( '第 %d 行, 第 %d 个字符开始不一样' % (differ[0][each], differ[1][each]) )
复制代码

希望可以共同进步
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-20 15:28:19 | 显示全部楼层
本帖最后由 风不会停息 于 2018-7-20 15:52 编辑
高渐飞 发表于 2018-7-14 20:07
兄dei,感谢你无私的分享。
第二个动手做一做程序运行时,发现了两个小错误,
(1)count_char 在循环后为 ...


已经发现这个问题了, 第一个我确实忘了初始化, 感谢你的指正, 第二个应该不用length - 1 吧, range(length)的长度和length是一样的, 应该是不会越界的, 在我电脑上执行时没问题的, 因为这几天考试没来及上鱼吧,就没有来得及回复你,帖子中的代码已经更新, 谢谢了,希望能一起进步
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-26 23:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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