将CSV行导入单独的TXT文件中?

2 投票
3 回答
2523 浏览
提问于 2025-04-17 04:05

任务 1: 从一个csv文件中读取每一行,并把它们分别存入不同的txt文件。

任务 2: 反过来:在一个文件夹里,从每个txt文件中读取内容,然后把这些内容放到一个csv文件中的一行里。也就是说,把所有的txt文件合并成一个csv文件。

你会怎么做呢?用Java还是Python更快完成这个任务呢?

更新: 对于Java,已经有一些很有用的库可以使用,比如opencsv或者javacsv。如果你对csv不太了解,最好去维基百科看看csv的相关内容。而这篇帖子会告诉你在Java中所有的可能性。


注意: 由于问题比较简单,有人猜测这是个作业。我在这里声明这不是。

更多背景:我正在进行自己的机器学习实验,并且在建立一个大规模的测试集。我需要爬取、抓取和文件类型转换作为实验的基本工具。目前我自己在搭建很多东西,最近因为一些发现突然想学习Python,感觉Python在很多解析和文件处理的场景下比Java更简洁。因此我有了这个问题。

我只是想节省你我双方的时间,直接切入主题,而不去说那些不太相关的背景。我的问题主要是关于第二个问题“Java和Python哪个更好”。因为我看到几行Python代码使用了一些csv库(?不太确定,所以我才问),但就是不知道怎么用Python。这些都是我提出这个问题的原因。谢谢。

3 个回答

0

在Python中,

任务1:

import csv
with open('file.csv', 'rb') as df:
    reader = csv.reader(df)
    for rownumber, row in enumerate(reader):
        with open(''.join(str(rownumber),'.txt') as f:
            f.write(row)

任务2:

from glob import glob
with open('output.csv', 'wb') as output:
    for f in glob('*.txt'):
        with open(f) as myFile:
            rows = myFile.readlines()
            output.write(rows)

你需要根据自己的需求来调整这些内容。

1

在这种情况下,我会选择使用Python,因为它通常比Java更简洁。而且,处理CSV文件在Python中非常简单,不需要安装额外的东西。我不太清楚Java的情况。

任务 1

根据官方文档的一个例子,大致上会是这样的:

import csv
with open('some.csv', 'r') as f:
    reader = csv.reader(f)
    rownumber = 0
    for row in reader:
        g=open("anyfile"+str(rownumber)+".txt","w")
        g.write(row)
        rownumber = rownumber + 1
        g.close()

任务 2

f = open("csvfile.csv","w")
dirList=os.listdir(path)
for fname in dirList:
    if fname[-4::] == ".txt":
       g = open("fname")
       for line in g: f.write(line)
       g.close
f.close()
3

根据你所写的内容,处理CSV文件其实没有什么特别的需求。特别是对于任务1,这只是对文本文件进行简单的数据输入输出操作。在Python中可以这样做:

for i,l in enumerate(open(the_file)):
   f = open('new_file_%i.csv' % i, 'w')
   f.write(l)
   f.close()

对于任务2,如果你能保证每个文件的结构是一样的(每行的字段数量相同),那么这同样也是一个简单的数据输入输出操作:

# glob files
files = glob('file_*.csv')
target = open('combined.csv', 'w')
for f in files:
   target.write(open(f).read())
   target.write(new_line_speparator_for_your_platform)
target.close()

你选择用Java还是Python来做这件事,主要看目标系统的支持情况和你个人的喜好。

撰写回答