将CSV行导入单独的TXT文件中?
任务 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 个回答
在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)
你需要根据自己的需求来调整这些内容。
在这种情况下,我会选择使用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()
根据你所写的内容,处理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来做这件事,主要看目标系统的支持情况和你个人的喜好。