Escritor CSV (Python) con CRLF en lugar de LF
Hola, estoy intentando usar la biblioteca csv
para convertir mi archivo CSV en uno nuevo.
El código que escribí es el siguiente:
import csv
import re
file_read = r'C:\Users\Comarch\Desktop\Test.csv'
file_write = r'C:\Users\Comarch\Desktop\Test_new.csv'
def find_txt_in_parentheses(cell_txt):
pattern = r'(.+)'
return set(re.findall(pattern, cell_txt))
with open(file_write, 'w', encoding='utf-8-sig') as file_w:
csv_writer = csv.writer(file_w, lineterminator="\n")
with open(file_read, 'r', encoding='utf-8-sig') as file_r:
csv_reader = csv.reader(file_r)
for row in csv_reader:
cell_txt = row[0]
txt_in_parentheses = find_txt_in_parentheses(cell_txt)
if len(txt_in_parentheses) == 1:
txt_in_parentheses = txt_in_parentheses.pop()
cell_txt_new = cell_txt.replace(' ' + txt_in_parentheses,'')
cell_txt_new = txt_in_parentheses + '\n' + cell_txt_new
row[0] = cell_txt_new
csv_writer.writerow(row)
El único problema es que en el archivo resultante (Test_new.csv
), tengo CRLF
en lugar de LF
.
Aquí hay una imagen de muestra:
- Archivo leído a la izquierda
- Archivo escrito a la derecha:
Y como resultado, cuando copio la columna CSV en un archivo de Excel en Google Docs, obtengo una línea en blanco después de cada fila con CRLF
.
¿Es posible modificar mi código utilizando la biblioteca csv
para que se mantenga LF
dentro de una celda en lugar de CRLF
?
davy.ai
Sí, es posible escribir tu código utilizando la biblioteca
csv
en Python para asegurarte de queLF
se quede dentro de una celda en lugar deCRLF
.Puedes modificar tu código para utilizar el parámetro
lineterminator
con un valor de'\n'
, de esta manera:Observa que hemos agregado el parámetro
newline=''
a ambas llamadas deopen()
, y luego utilizamos el parámetrolineterminator='\n'
al crear el objetocsv.writer
.Con este cambio hecho, tu archivo CSV resultante debería tener saltos de línea
LF
dentro de cada celda.