2301_76860769 2023-05-18 22:57 采纳率: 0%
浏览 14

请问python怎么根据文件名称读取文件

编写一个函数compare(file1,file2),比较两个文本文件内容是否相同。在主程
序中输入两个要比较的两文件名,然后调用以上函数,文件内容相同则输出“No
difference!”;否则,输出从第几个字符开始不相同。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-19 08:25
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这篇博客: Python自动化:提取扫描件中的文字中的 compare_file(file1,file2,file3) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      提取出的csv与原csv进行对比,将内容错误的行写入file3,同时附赠错误提示

      file1:提取出的csv

      file2:原csv

      file3:有误内容

      def compare_file(file1,file2,file3):
      ​
        #定义空列表来存放两个文件的对应行engname1,engname2,country1,country2,chiname1,chiname2
      ​
        #字符串存放对比会出现的错误情况engnameerror,countryerror,chinameeeror
      ​
        #open打开提取的文件 别名f1,f2
      ​
        #readlines()读取文件中的每一行 存放在fileone,filetwo
      ​
        #将fileone中的每一列分离出来,添加进列表中
      ​
        for row in fileone:
      ​
          engname1.append(row.split(',')[0])   
          
          try:
          
            country1.append(row.split(',')[1])
          
            chiname1.append(row.split(',')[2])
          
          except IndexError :    #可能会出现索引越界
          
            country1.append(' ') 
          
            chiname1.append(' ')
      ​
        #同理将filetwo中的每一列分离出来,添加进列表中
        
        #打开file3
        
        #循环第一列的单元格
        
        for cell in engname1:  
           
           #比较文件中的第一列,若fileone中的第一列中的元素不在filetwo的第一列的对应行中,将这一行写进file3中
           
          if cell not in engname2:      
          
            csvrow=fileone[engname1.index(cell)]+engnameerror
          
            writer.writerow(csvrow.split(','))
      ​
        #若第一列在,则比较第二列,若fileone中的第二列中的元素不在filetwo的第二列对应行中,将这一行写进file3中
      ​
       #若第一列,第二列都对应,则比较第三列,若fileone中的第三列中的元素不在filetwo的第三列对应行中,将这一行写进file3中
      ​
         #关闭文件

      运行结果

      有误的行写入different.csv,同时在行尾显示错误信息

      f6ac6a57b7099afbe121e33f0bc30a5d.png

      f28c4d802f317e661be349396f431811.png

      运行问题

      问题抛出:UnicodeDecodeError: 'utf8' codec can't decode byte 0xa4 in position

      解决措施:先将文件另存为csv,再用记事本打开,点击文件->另存为,在最下方修改编码方式

    • 以下回答来自chatgpt:
      def compare(file1, file2):
          with open(file1, 'r') as f1, open(file2, 'r') as f2:
              content1 = f1.read()
              content2 = f2.read()
              if content1 == content2:
                  print("No difference!")
              else:
                  i = 0
                  while i < len(content1) and i < len(content2):
                      if content1[i] != content2[i]:
                          print("Difference starting from the", i+1, "character.")
                          return
                      i += 1
                  print("The two files have different lengths.")
      

      首先,打开文件并读取文件内容。然后直接比较两个文件内容是否相同,如果是,则输出"No difference!"。如果不同,则遍历两个文件的内容,如果存在不同之处,则输出从哪一个字符开始不同。最后在主程序中通过输入两个文件名,调用该函数即可。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 请提交代码 5月18日
  • 创建了问题 5月18日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画