【问题标题】:How to create a CSV file if it does not exist and then only append to it Python如果它不存在,如何创建一个 CSV 文件,然后只附加到它 Python
【发布时间】:2015-11-12 07:03:20
【问题描述】:

如果目录中不存在文件,我想知道如何创建文件。我只想附加数据。

我在 Python 中收到此错误:No such file or directory.

这是我的代码:

with open (saveAddr+".csv",'a') as allpckts:                            
    writer = csv.DictWriter(allpckts, delimiter=',', fieldnames=header) 
    if pktnum < 2:                                                        
        writer.writerow(dict((fn,fn) for fn in header))                 
        writer.writerow(packet_data)                                    
    else:                                                               
        writer.writerow(packet_data)    

更新: 我的问题是我不在正确的目录中。因此,对于任何搜索仅附加到 CSV 文件的最基本语法的人来说:

with open (filename+".csv",'a') as filedata:                            
    writer = csv.DictWriter(filedata, delimiter=',', fieldnames=header)
    writer.writerow(data) 

【问题讨论】:

  • 什么是 saveAddr ?你想要的是“a”模式的作用。
  • saveAddr 是我要创建的文件的名称(如果它不存在)。我的情况是smth。像 ED_C0_B0_E0_D2_87
  • 这可以自己工作吗? open(saveAddr+".csv", 'a')
  • 请显示完整的错误消息,而不仅仅是它的 sn-p。可能是指定路径中的目录名不存在。
  • 也许这些信息对你有帮助:stackoverflow.com/questions/13248020/…

标签: python csv append file-writing


【解决方案1】:

很可能您正在尝试在不存在的目录中创建文件。

你想要的是'a'模式的作用,如果文件不存在,它会创建文件,否则它会附加到文件中。但它不会创建目录,如果这些目录不存在,您应该在运行程序之前创建 saveAddr 中使用的目录。

如果您需要编程解决方案,您可以查看os.mkdir,它应该会创建目录。

【讨论】:

    【解决方案2】:
    with open (saveAddr+".csv",'a') as allpckts:
    

    如果不存在则创建一个新文件saveAddr+".csv",否则打开它以进一步追加。假设saveAddr是文件名(如果其中包含路径,请检查路径是否存在。)

    如果要检查文件是否存在

    os.path.isfile('/path/to/csv')
    

    【讨论】:

      【解决方案3】:
      #check if dir exist if not create it
      def check_dir(file_name):
          directory = os.path.dirname(file_name)
          if not os.path.exists(directory):
              os.makedirs(directory)
      
      
      def save(file_name, records):
          check_dir(file_name)
          csv_file = open(file_name,'w+')
          csvWriter = csv.writer(csv_file,delimiter=',')
          count = 0
          for record in records:
              csvWriter.writerow([record])
              count+=1
      
          print(count, " record saved to ",file_name)
          return  count    enter code here
      
      directory = os.path.abspath(os.path.join(os.path.curdir))
      save(directory+"/data/filename.csv",your_list)
      

      【讨论】:

        猜你喜欢
        • 2013-12-07
        • 2019-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 2022-12-09
        • 2020-02-20
        相关资源
        最近更新 更多