Как отформатировать текстовый файл в Python - PullRequest
3 голосов
/ 19 сентября 2019

Я пытаюсь преобразовать TXT-файл в CSV-файл на Python.Текущий формат текстового файла - это несколько строк, разделенных пробелами.Я хотел бы записать каждую строку в одну ячейку в CSV-файле.

Текстовый файл имеет следующую структуру:

UserID Desktop Display (версия) (дескриптор сервера / порта), дата

UserID Desktop Display (версия) (дескриптор сервера / порта), дата

и т. Д.

Мой подход будет следующим:

with open('licfile.txt', "r+") as in_file:
    stripped = (line.strip() for line in in_file)
    lines = (line.split(" ") for line in stripped if line)

with open('licfile.csv', 'w') as out_file:
    writer = csv.writer(out_file)
    writer.writerow(('user', 'desktop', 'display', 'version', 'server', 'handle', 'date'))
    writer.writerows(lines)

К сожалению, этоне работает, как ожидалось.Я получаю следующее ValueError: I / O операция над закрытым файлом.Кроме того, в одной ячейке в файле CSV отображаются только предполагаемые заголовки строк.

Какие-либо советы о том, как действовать?Большое спасибо заранее.

Ответы [ 4 ]

2 голосов
/ 19 сентября 2019

как насчет

with open('licfile.txt', 'r') as in_file, open('licfile.csv', 'w') as out_file:
    for line in in_file:
        if line.strip():
            out_file.write(line.strip().replace(' ', ',') + '\n')

и для немецких энтузиастов Excel ...

...
    ...
        ...
            ... .replace(' ', ';') + '\n')

:)

1 голос
/ 19 сентября 2019

Вы также можете использовать встроенный модуль csv, чтобы выполнить это легко:

import csv

with open('licfile.txt', 'r') as in_file, open('licfile.csv', 'w') as out_file:
    reader = csv.reader(in_file, delimiter=" ")  
    writer = csv.writer(out_file, lineterminator='\n')
    writer.writerows(reader)

Я использовал аргумент lineterminator='\n', так как по умолчанию используется значение \r\n, и в итоге вы получаете дополнительныйстрока возврата на строку в большинстве случаев.

Есть также несколько аргументов, которые вы можете использовать, если, скажем, необходимо заключить в кавычки или требуется другой разделитель: https://docs.python.org/3/library/csv.html#csv-fmt-params

0 голосов
/ 19 сентября 2019

Вы используете понимание с круглыми скобками, что приведет к созданию объекта кортежа.Вместо этого просто используйте квадратную скобку, которая будет возвращать список.см. пример ниже:

stripped = [line.strip() for line in in_file]
lines = [line.split(" ") for line in stripped if line]
0 голосов
/ 19 сентября 2019
licfile_df = pd.read_csv('licfile.txt',sep=",", header=None)
...