Tengo un problema al escribir en un archivo CSV. ¿Qué hay de malo con este código?

f = open("test.csv", 'w', encoding='utf-8')
with open("sprawdzamy.txt", "r", encoding="utf-8") as plik:
    text = plik.read()
tester=text.split("\n")

with open("testdata_hr.csv", "r", encoding="utf-8") as plik:
    x = 0
    for line in plik:
        someList=line.split(",")

        if x == 0:
             x+=1
             continue
        for element in tester:
            if element in line:
                for s in someList:
                    f.write(s +"\t")
                f.write("Good" +'\n')

Entonces quiero obtener un archivo como:

    1  2  3  4  5  Good
    2  4  5  2  1  Good

Pero me sale algo así:

    1  2  3  4  5  
      Good
    2  4  5  2  1 
      Good
0
xmichalekk 7 oct. 2019 a las 15:07

3 respuestas

La mejor respuesta

Parece que su línea contiene new line caracteres, así que para eliminar ese carácter use rstrip

f = open("test.csv", 'w', encoding='utf-8')
with open("sprawdzamy.txt", "r", encoding="utf-8") as plik:
    text = plik.read()
tester=text.split("\n")

with open("testdata_hr.csv", "r", encoding="utf-8") as plik:
    x = 0
    for line in plik:
        someList=line.split(",")

        if x == 0:
             x+=1
             continue
        for element in tester:
            if element in line:
                for s in someList:
                    f.write(s.rstrip('\n\r') +"\t")
                f.write("Good" +'\n')
0
Shanteshwar Inde 7 oct. 2019 a las 12:20

Es posible que desee pensar en una sola escritura en lugar de escrituras consecutivas. Algo como esto:

write_string = ""
for s in someList:
    write_string += f"{s}\t"
f.write(f"{write_string} Good \n")

Siento que debería haber una solución más elegante que esta, pero debería funcionar.

0
user3203721 7 oct. 2019 a las 12:13

Pocas preocupaciones aquí

  1. El archivo CSV implica que es un archivo con valores separados por comas
1,2,3,4,5,Good
2,4,5,2,1,Good
  1. Utilice el módulo python csv para escribir un archivo csv.
import csv

with open('employee_file.csv', mode='w') as employee_file:
    employee_writer = csv.writer(employee_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

    employee_writer.writerow(['John Smith', 'Accounting', 'November'])
    employee_writer.writerow(['Erica Meyers', 'IT', 'March'])

El archivo de salida se vería así

John Smith,Accounting,November
Erica Meyers,IT,March

Obtenga más información en https://realpython.com/python-csv/

0
Sampath 7 oct. 2019 a las 12:17
58269259