【问题标题】:breaking csv file in two files with python用python将csv文件分成两个文件
【发布时间】:2017-02-28 19:20:27
【问题描述】:

这是我第一个使用 python 的项目,但我并不擅长编程。我有一个包含两个表的 csv 文件。

  • 表 1 标题
  • 第 1 行
  • 第二行
  • ...
  • 空白行
  • 空白行
  • 表2标题
  • 第 1 行
  • 第二行
  • ...

这是我的代码

import csv

csv_file = open('usagebased.csv')
csv_reader = csv.reader(csv_file, delimiter=',')
next(csv_reader)

所以我想将文件拆分为两个 csv 文件。最好的方法是什么?我可以根据标题 2 或空白行拆分文件吗?

谢谢!

【问题讨论】:

  • 你能修复你的代码格式吗?
  • 听起来您想将“usagebased.csv”中的数据拆分为两个文件,除了消除那些空行之外,不以任何方式更改行数据。如果是这样,则无需使用csv 模块,只需逐行读取文件,并将这些行复制到目标文件即可。当你读到一个空行时继续循环直到你看到新的标题行,关闭旧的目标文件并打开新的。
  • 为什么要撤消我修复代码格式的编辑?
  • 好的,谢谢。这对我来说容易多了。几个小时后,我会告诉你是否成功。
  • 这是一个意外,我是论坛的新手。我不知道怎么把它放回去,对不起......

标签: python csv


【解决方案1】:

函数csv.reader 可以接受任何符合迭代器协议的对象,并从next() 输出字符串。知道了这一点,您实际上可以通过空白行将 csv 文件拆分为两个列表。之后,您可以使用两个列表同时输入两个 csv.reader

import csv

two_tables = open('usagebased.csv').read().split("\n\n\n")
# Feed first csv.reader
first_csv = csv.reader(two_tables[0], delimiter=',')
# Feed second csv.reader
second_csv = csv.reader(two_tables[1], delimiter=',')

【讨论】:

  • 这当然是一种快速有效的方法。 OTOH,如果输入文件很大,它将消耗大量 RAM,将整个内容读入一个字符串,然后像这样拆分它。
【解决方案2】:

多亏了你们两个,我成功了。非常感谢。

f = open('usagebased.csv').read().split("\n\n\n")
f1 = f[0]
f2 = f[1]

file1 = open('test1.csv','w')
file2 = open('test2.csv','w')

file1.write(f1)
file2.write(f2)

【讨论】:

    【解决方案3】:

    如果我们不知道新行的数量,这会有所帮助 ,我尝试编写尽可能简单的代码: 因为你没有对文件中的 csv 内容做任何事情,所以你不需要使用 csv 库

    FzListe
    7MA1, 7OS1
    7MA1, 7ZJB
    
    
    7MA2, 7MA3, 7OS1
    76G1, 7MA1, 7OS1
    7MA1, 7OS1
    71E5, 71E6, 7MA1, FSS1
    

    这里是代码:

    f= open('test.txt','rt')
    while True:
     name = 0
     for s in f:
      if not s=='\n':
       with open(str(name),'at') as ff:
        ff.write(s)
      else:
       while s =='\n':
        s = next(f)
       name +=1
       with open(str(name),'at') as ff:
        ff.write(s) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-20
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 2012-07-31
      • 2012-08-12
      相关资源
      最近更新 更多