csv行分成单独的txt文件?

时间:2011-10-11 14:54:23

标签: java python csv text-files

任务1:从一个csv文件中读取每一行到一个单独的txt文件。

任务2:反向:在一个文件夹中,从每个txt文件中读取文本,并在单个csv中放入一行。因此,将所有txt文件读入一个csv文件。

你会怎么做? Java或Python能否很快完成这项任务?

更新 对于Java,您可以使用一些非常有用的库,例如opencsvjavacsv。但如果没有关于csv的知识,最好看一下维基百科关于csv的信息。这个post告诉你Java中的所有可能性。


注意:由于问题的简单性,有人预先假定这是一个功课。我在此声明不是。

更多背景:我正在研究自己的机器学习实验和建立大规模测试集。我需要抓取,抓取和文件类型传输作为实验的基本实用程序。现在自己构建很多东西,并且由于最近的一些发现突然想学习Python,并且感觉Python在许多解析和文件处理情况下比Java更简洁。因此得到了这个问题。

我只是想通过在没有说明不那么相关的背景的情况下获得要点来为你和我节省时间。我的问题更多的是关于第二个问题“Java vs Python”。因为我使用一些csv库遇到了几行Python代码(?不确定,这就是我问的原因),但只是不知道如何使用Python。这就是我得到这个问题的原因。感谢。

3 个答案:

答案 0 :(得分:3)

根据您所写的内容,几乎不需要使用特定于CSV文件的内容。特别是对于任务1,这是对文本文件的纯数据I / O操作。例如,在Python中:

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

对于任务2,如果可以保证每个文件具有相同的结构(每行的字段数相同),那么它又是纯数据I / O操作:

# 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执行此操作取决于目标系统的可用性和您的个人偏好。

答案 1 :(得分:1)

在这种情况下,我会使用python,因为它通常比Java更简洁。 另外,CSV文件非常容易使用Python而无需安装。我不知道Java。

任务1

基于official documentation

的示例,这大致是基于此的
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()

答案 2 :(得分: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)

您需要针对用例调整这些内容。