Convertissez le fichier txt délimité par des tabulations en fichier csv en utilisant Python
alors je veux convertir un fichier texte délimité par un simple onglet en un fichier csv. Si je convertis le fichier txt en une chaîne de caractères en utilisant la chaîne de caractères.split('n'), je reçois une liste avec chaque élément de la liste comme une chaîne de caractères avec des 't' entre chaque colonne. Je me disais que je pourrais juste remplacer le 't' par une virgule Mais ça ne traitera pas la chaîne dans la liste comme de la chaîne et me permettra d'utiliser de la chaîne.remplacer. Ici est le début de mon code qui a encore besoin d'un moyen d'analyser l'onglet "t".
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 réponses
csv
supporte les fichiers délimités par tabulation. D'approvisionnement delimiter
argument reader
:
import csv
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)
pourquoi vous devriez toujours utiliser le mode ' rb ' lors de la lecture de fichiers avec le csv
module:
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.
Qu'est-ce qu'il y a dans le fichier échantillon: n'importe quel vieux Camelote, y compris les caractères de contrôle obtenus en extrayant des blobs ou n'importe quoi d'une base de données, ou l'utilisation imprudente de CHAR
fonction dans les formules Excel, or ...
>>> 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 suit CP/ M, MS-DOS, et Windows quand il lit des fichiers en mode texte:\r\n
est reconnu comme le séparateur de ligne et est servi comme \n
et \x1a
alias Ctrl-Z est reconnu comme marqueur de fin de fichier.
>>> open('demo.txt', 'r').read()
'h1\t"h2a\nh2b"\th3\nx1\t"x2a\nx2b"\tx3\ny1\ty2a' # WHOOPS
csv avec un fichier ouvert avec 'rb' fonctionne comme prévu:
>>> import csv
>>> list(csv.reader(open('demo.txt', 'rb'), delimiter='\t'))
[['h1', 'h2a\nh2b', 'h3'], ['x1', 'x2a\r\nx2b', 'x3'], ['y1', 'y2a\x1ay2b', 'y3']]
mais en mode texte n'est pas:
>>> list(csv.reader(open('demo.txt', 'r'), delimiter='\t'))
[['h1', 'h2a\nh2b', 'h3'], ['x1', 'x2a\nx2b', 'x3'], ['y1', 'y2a']]
>>>
C'est comment je le Fais
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)