【问题标题】:Save a new .tsv file for each record in a .csv file in Python在 Python 的 .csv 文件中为每条记录保存一个新的 .tsv 文件
【发布时间】:2018-11-22 12:47:16
【问题描述】:

这是我的第一个问题,等待回答您的许多其他问题。我想做的是创建很多新的 .tsv 文件,一个用于大 .csv 文件的每条记录(行)。从现在开始我所做的基本上是创建一个新的 .txt 文件,其中包含 .csv 文件的所有数据,由制表符而不是逗号分隔。这就是我所做的:

with open('mycsv.csv','r', encoding="utf-8") as csvin, open('out.txt', 'w', encoding="utf-8") as tsvout:
    csvin = csv.reader(csvin)
    tsvout = csv.writer(tsvout, delimiter='\t')

    for row in csvin:
        tsvout.writerow(row)

感谢您的帮助。

编辑:我忘了!我还想将输出 tsv 文件命名为 doc_i.tsv,其中 i 是 .csv 文件中每条记录的行号。

【问题讨论】:

  • 如果你想create a lot of new .tsv files, one for each record (row) of a big .csv file,你需要有两个单独的with-blocks而不是一个有两个文件创建,第二个在for循环中

标签: python pandas


【解决方案1】:

这是一种方法,使用np.array_split

import pandas as pd
import numpy as np

df = pd.read_csv('big_file.csv')
tsvs = np.array_split(df, df.shape[0])

for i, tsv in enumerate(tsvs):
    tsv.to_csv('{}.tsv'.format(i), sep='\t', index=False, header=False)

请注意,这将创建名为 0.tsv1.tsv... 的文件,您可以在 to_csv 调用中更改它。

【讨论】:

  • 谢谢。我这样做了,它实际上创建了很多 .tsv 文件,每个文件都是数据框的一行。但是在每个 .tsv 文件中,我还获得了数据框的所有标签。这个解决方案也在做的是创建无限文件,只有 .csv 文件的标签。在每个 .tsv 文件中,我只需要一行数据而不是两行(标签和数据)。我不得不手动停止运行命令。
  • @PaoloG。我添加了不包括标签的header=False
  • 谢谢,但它会继续无限迭代,在创建我真正需要的文件后创建空的 .tsv 文件。不得不再次手动停止它。
  • @PaoloG。抱歉,我忘记将size 更改为shape[0],现在它将按预期工作。
  • 谢谢!!最后一件事:如果我不想在每个 .tsv 文件中包含每行的索引怎么办?我也尝试添加 index_label=False 但它没有用。
猜你喜欢
  • 2016-01-11
  • 2021-12-08
  • 2022-08-17
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多