CSV строки в отдельные текстовые файлы? - PullRequest
1 голос
/ 11 октября 2011

Задача 1: Считать каждую строку из одного файла CSV в один отдельный текстовый файл.

Задание 2: Обратное: в одной папке прочитайте текст из каждого текстового файла и поместите в строку в одном CSV. Итак, прочитайте все текстовые файлы в один CSV-файл.

Как бы вы это сделали? Будет ли Java или Python хорошо выполнять эту задачу очень быстро?

Обновление: Для Java уже есть несколько довольно полезных библиотек, которые вы можете использовать, например opencsv или javacsv . Но лучше взгляните на википедию о csv , если нет знаний о csv. И этот пост рассказывает вам обо всех возможностях Java.


Примечание : Из-за простоты вопроса некоторые предполагают, что это домашнее задание. Настоящим заявляю, что это не так.

Дополнительные сведения: я работаю над собственными экспериментами по машинному обучению и настраиваю крупномасштабный набор тестов. В качестве основной утилиты для эксперимента мне нужны сканирование, очистка и передача типов файлов. Сейчас я сам много чего строю, и вдруг захочу изучить Python из-за некоторых недавних открытий и почувствовать, что Python более лаконичен, чем Java, для многих ситуаций анализа и обработки файлов. Отсюда и возник этот вопрос.

Я просто хочу сэкономить время и для вас, и для меня, дойдя до сути, не указав не столь связанный фон. И мои вопросы больше о втором вопросе "Java vs Python". Потому что я сталкиваюсь с несколькими строками кода Python, используя некоторую библиотеку csv (не уверен, поэтому я и спросил), но просто не знаю, как использовать Python. Это все причины, почему я получил этот вопрос. Спасибо.

Ответы [ 3 ]

3 голосов
/ 11 октября 2011

Из того, что вы пишете, нет необходимости использовать что-то конкретное для файлов 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, зависит от доступности на целевой системе и только от ваших личных предпочтений.

1 голос
/ 11 октября 2011

В этом случае я бы использовал 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()
0 голосов
/ 11 октября 2011

в питоне, Задача 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)

Вам нужно будет настроить их для ваших случаев использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...