【问题标题】:Converting multiple CSVs to TSVs using Python使用 Python 将多个 CSV 转换为 TSV
【发布时间】:2020-02-09 15:23:27
【问题描述】:

尝试使用 python 将多个 (5) CSV 转换为 TSV,但是当我运行它时它只创建 1 个 TSV。有人可以帮忙吗?

import csv
import sys
import os
import pathlib

print ("Exercise1.csv"), sys.argv[0]

dirname = pathlib.Path('/Users/Amber/Documents')

for file in pathlib.Path().rglob('*.csv'):

    with open(file,'r') as csvin, open('Exercise1.tsv', 'w') as tsvout:
        csvin = csv.reader(csvin)
        tsvout = csv.writer(tsvout, delimiter='\t')

        for row in csvin:
            print(row)
            tsvout.writerow(row)
    exit ()

谢谢!

【问题讨论】:

  • 查看with 语句中的第二个open...它始终使用相同的名称。
  • 此外,exit() 在第一次迭代结束时被调用。
  • @mkrieger1:如果我将exit() 向左移动一个缩进,它将开始运行无限循环。知道为什么会这样吗?
  • 如果您在for file in pathlib.Path()... 循环的每次迭代中打印file 变量以查看发生了什么?
  • @mkrieger1:我会在for i,file in pathlib.Path()... 下添加一行print(i,file) 吗?抱歉,也许是一个基本问题,我对此很陌生!

标签: python python-3.x csv pathlib


【解决方案1】:

您正在使用 for 循环打开 .csv 文件夹中的每个文件,但只打开一个要写入的文件 (Exercise1.tsv)。所以你每次都覆盖同一个文件。您需要在循环的每次迭代中创建要写入的新文件。你可以试试这样的:

for i,file in enumerate(pathlib.Path().rglob('*.csv')):

    with open(file,'r') as csvin, open('Exercise_{}.tsv'.format(i), 'w') as tsvout:
        csvin = csv.reader(csvin)
        tsvout = csv.writer(tsvout, delimiter='\t')

enumerate() 向 for 循环添加一个计数器。这会将一个数字附加到您的 Exercise.tsv 文件中,从 0 到您目录中文件的长度。

【讨论】:

  • 感谢您的帮助!我试过了,它确实创建了一个名为“Exercise_0”的新TSV,而不是Exercise1,但仍然只创建了1个TSV文件......当我尝试将exit()语句向左移动时,它开始创建大量TSV(比我在那个目录中的 CSV 文件多得多?!)...你知道为什么会发生这种情况吗? @dayno85
猜你喜欢
  • 1970-01-01
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 2014-07-08
相关资源
最近更新 更多