将csv转换为txt(制表符分隔)并迭代目录python中的文件

问题描述 投票:0回答:2

我有〜1000个文件,带有一个两列数组,行数不同,扩展名为.csv。我需要读取文件的每一行,跳过第一个标题行,然后将所有内容写为制表符分隔的.txt文件。我试过在python中写这个。我想改变numbers.csv

X,Y
1,2
3,4
...

1[tab]2
3[tab]4
...

我的代码如下。

在“下一个(csv_file)”操作中,我的程序正在读取错误“StopIteration”,infile的内容被删除。如果我从我的代码中删除这一行,我仍然覆盖了文件内的内容,但对外部文件没有任何作用。

有人可以帮助我实现这一目标吗? `

import csv
import os

cwd = os.getcwd()
#print(cwd)

for file in os.listdir():

    file_name, file_ext = os.path.splitext(file)

    if file_ext == '.csv':
        with open(file,'r') as csv_file:
            csv_reader = csv.reader(csv_file)

            next(csv_file)

            for line in csv_reader:

            with open(file, 'w') as new_txt:    #new file has .txt extension
                txt_writer = csv.writer(line, delimiter = '\t') #writefile
                txt_writer.writerow(line)   #write the lines to file`
python data-analysis file-conversion
2个回答
0
投票

你走在正确的轨道上。我对您的代码进行了一些更改:

import csv
import os

cwd = os.getcwd()
#print(cwd)

for file in os.listdir('.'):  # use the directory name here

    file_name, file_ext = os.path.splitext(file)

    if file_ext == '.csv':
        with open(file,'r') as csv_file:
            csv_reader = csv.reader(csv_file)

            csv_reader.next()  ## skip one line (the first one)

            newfile = file + '.txt'

            for line in csv_reader:
                with open(newfile, 'a') as new_txt:    #new file has .txt extn
                    txt_writer = csv.writer(new_txt, delimiter = '\t') #writefile
                    txt_writer.writerow(line)   #write the lines to file`

在写作中,你需要使用'a'(追加)代替'w'(写),否则,你只需要一行 - 最后一行。并且,如果最后一行是一个空行,那么你所拥有的只是一个空白的文件,即什么都没有。


0
投票
In[2]: import csv
In[3]: with open('test_file.txt', 'r') as f:
  ...:     for line in f:
  ...:         print(line)
  ...: 
X,Y

1,2

3,4

In[4]: with open('test_file.txt', 'r') as f:
  ...:     reader = csv.DictReader(f)
  ...:     fieldnames = reader.fieldnames
  ...:     result = list(reader)
  ...: 
  ...: with open('test_output.tsv', 'w') as f:
  ...:     writer = csv.DictWriter(f, fieldnames=fieldnames, delimiter='\t')
  ...:     writer.writeheader()  # remove this line if you don't want header
  ...:     writer.writerows(result)
  ...: 
In[5]: with open('test_output.tsv', 'r') as f:
  ...:     for line in f:
  ...:         print(line)
  ...: 
X   Y

1   2

3   4
© www.soinside.com 2019 - 2024. All rights reserved.