Вопрос по python – Преобразование TXT-файла с разделителями табуляции в CSV-файл с использованием Python

20

Поэтому я хочу преобразовать простой текстовый файл с разделителями табуляции в CSV-файл. Если я преобразую текстовый файл в строку, используя string.split («\ n»), я получу список с каждым элементом списка в виде строки с «& apos; \ t»; между каждым столбцом. Я думал, что смогу просто заменить & t; с запятой, но она не будет обрабатывать строку в списке как строку и позволит мне использовать string.replace. Вот начало моего кода, который все еще нуждается в способе разбора вкладки & quot; \ t & quot ;.

import csv
import sys

txt_file = r"mytxt.txt"
csv_file = r"mycsv.csv"

in_txt = open(txt_file, "r")
out_csv = csv.writer(open(csv_file, 'wb'))

file_string = in_txt.read()

file_list = file_string.split('\n')

for row in ec_file_list:       
    out_csv.writerow(row)

Ваш Ответ

3   ответа
1

csv модуль:

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

Что находится в файле примера: любой старый мусор, включая контрольные символы, полученные путем извлечения больших двоичных объектов или чего-либо еще из базы данных, или неправомерное использованиеCHAR функция в формулах Excel, или ...

>>> open('demo.txt', 'rb').read()
'h1\t"h2a\nh2b"\th3\r\nx1\t"x2a\r\nx2b"\tx3\r\ny1\ty2a\x1ay2b\ty3\r\n'

Python следует CP / M, MS-DOS и Windows, когда читает файлы в текстовом режиме:\r\n распознается как разделитель строк и подается как\n, а также\x1a он же Ctrl-Z распознается как маркер END-OF-FILE.

>>> open('demo.txt', 'r').read()
'h1\t"h2a\nh2b"\th3\nx1\t"x2a\nx2b"\tx3\ny1\ty2a' # WHOOPS

csv с файлом, открытым с помощью «rb»; работает как положено:

>>> import csv
>>> list(csv.reader(open('demo.txt', 'rb'), delimiter='\t'))
[['h1', 'h2a\nh2b', 'h3'], ['x1', 'x2a\r\nx2b', 'x3'], ['y1', 'y2a\x1ay2b', 'y3']]

но текстовый режим не делает:

>>> list(csv.reader(open('demo.txt', 'r'), delimiter='\t'))
[['h1', 'h2a\nh2b', 'h3'], ['x1', 'x2a\nx2b', 'x3'], ['y1', 'y2a']]
>>>
Error: User Rate Limit ExceededC stdioError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
41

csv поддерживает файлы с разделителями табуляции. Поставьтеdelimiter argument to reader:


txt_file = r"mytxt.txt"
csv_file = r"mycsv.csv"

# use 'with' if the program isn't going to immediately terminate
# so you don't leave files open
# the 'b' is necessary on Windows
# it prevents \x1a, Ctrl-z, from ending the stream prematurely
# and also stops Python converting to / from different line terminators
# On other platforms, it has no effect
in_txt = csv.reader(open(txt_file, "rb"), delimiter = '\t')
out_csv = csv.writer(open(csv_file, 'wb'))

out_csv.writerows(in_txt)
Error: User Rate Limit ExceededwithError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/5180555/python-2-and-3-csv-reader
Error: User Rate Limit Exceeded
0

import csv

with open(txtfile, 'r') as infile, open(csvfile, 'w') as outfile:
     stripped = (line.strip() for line in infile)
     lines = (line.split(",") for line in stripped if line)
     writer = csv.writer(outfile)
     writer.writerows(lines)

Похожие вопросы