Tengo un archivo tsv que incluye algunos datos de nueva línea.
111 222 333 "aaa" 444 555 666 "bb b" Aquí b en la tercera línea es un carácter de nueva línea de bb en la segunda línea, por lo que son un dato:
El cuarto valor de la primera línea:
aaaEl cuarto valor de la segunda línea:
bb bSi utilizo Ctrl+C y Ctrl+V para pegar en un archivo de Excel, funciona bien. Pero si quiero importar el archivo usando python, ¿cómo analizarlo?
Yo he tratado:
lines = [line.rstrip() for line in open(file.tsv)] for i in range(len(lines)): value = re.split(r'\t', lines[i]))Pero el resultado no fue bueno:
Deseo:
Simplemente use el módulo csv . Conoce todos los posibles casos de esquina en archivos CSV como nuevas líneas en campos citados. Y puede delimitar en pestañas.
with open("file.tsv") as fd: rd = csv.reader(fd, delimiter="\t", quotechar='"') for row in rd: print(row)saldrá correctamente:
['111', '222', '333', 'aaa'] ['444', '555', '666', 'bb\nb']import pandas as pd data = pd.read_csv ("file.tsv", sep = '\t')Los caracteres de nueva línea, cuando están dentro del contenido (celda) de su archivo .tsv/.csv, generalmente se encuentran entre comillas. De lo contrario, los análisis estándar podrían confundirlo con el comienzo de la siguiente fila. En tu caso, la línea
for line in open(file.tsv)utiliza automáticamente el carácter de nueva línea como separador.
Si está seguro de que el archivo solo tiene 4 columnas, simplemente puede leer el texto completo, dividirlo según la pestaña y luego extraer 4 elementos a la vez.
# read the entire text and split it based on tab old_data = open("file.tsv").read().split('\t') # Now group them 4 at a time # This simple list comprehension creates a for loop with step size = num. of columns # It then creates sublists of size 4 (num. columns) and puts it into the new list new_data = [old_data[i:i+4] for i in range(0, len(old_data), 4)]Idealmente, debe cerrar el contenido que podría tener saltos de línea entre comillas.