how - Python escribe en CSV línea por línea
write on csv file python (5)
Tengo datos a los que se accede mediante solicitud http y el servidor los devuelve en un formato separado por comas, tengo el siguiente código:
site= ''www.example.com''
hdr = {''User-Agent'': ''Mozilla/5.0''}
req = urllib2.Request(site,headers=hdr)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
soup = soup.get_text()
text=str(soup)
El contenido del texto es el siguiente:
april,2,5,7
may,3,5,8
june,4,7,3
july,5,6,9
¿Cómo puedo guardar estos datos en un archivo CSV? Sé que puedo hacer algo similar a lo siguiente para iterar línea por línea:
import StringIO
s = StringIO.StringIO(text)
for line in s:
Pero no estoy seguro de cómo escribir correctamente cada línea en CSV
EDITAR ---> Gracias por los comentarios que sugirió, la solución era bastante simple y se puede ver a continuación.
Solución:
import StringIO
s = StringIO.StringIO(text)
with open(''fileName.csv'', ''w'') as f:
for line in s:
f.write(line)
¿Qué hay de esto?
with open("your_csv_file.csv", "w") as f:
f.write("/n".join(text))
str.join() Devuelve una cadena que es la concatenación de las cadenas en iterable. El separador entre elementos es la cadena que proporciona este método.
Forma general:
##text=List of strings to be written to file
with open(''csvfile.csv'',''wb'') as file:
for line in text:
file.write(line)
file.write(''/n'')
O
Usando el escritor CSV:
import csv
with open(<path to output_csv>, "wb") as csv_file:
writer = csv.writer(csv_file, delimiter='','')
for line in data:
writer.writerow(line)
O
La forma más simple:
f = open(''csvfile.csv'',''w'')
f.write(''hi there/n'') #Give your csv text here.
## Python will convert /n to os.linesep
f.close()
Para complementar las respuestas anteriores, preparé una clase rápida para escribir en archivos CSV. Hace que sea más fácil administrar y cerrar archivos abiertos y lograr consistencia y un código más limpio si tiene que lidiar con múltiples archivos.
class CSVWriter():
filename = None
fp = None
writer = None
def __init__(self, filename):
self.filename = filename
self.fp = open(self.filename, ''w'', encoding=''utf8'')
self.writer = csv.writer(self.fp, delimiter='';'', quotechar=''"'', quoting=csv.QUOTE_ALL, lineterminator=''/n'')
def close(self):
self.fp.close()
def write(self, elems):
self.writer.writerow(elems)
def size(self):
return os.path.getsize(self.filename)
def fname(self):
return self.filename
Ejemplo de uso:
mycsv = CSVWriter(''/tmp/test.csv'')
mycsv.write((12,''green'',''apples''))
mycsv.write((7,''yellow'',''bananas''))
mycsv.close()
print("Written %d bytes to %s" % (mycsv.size(), mycsv.fname()))
Que te diviertas
Podrías simplemente escribir en el archivo como escribirías cualquier archivo normal.
with open(''csvfile.csv'',''wb'') as file:
for l in text:
file.write(l)
file.write(''/n'')
Si por si acaso, es una lista de listas, puede usar directamente el módulo
csv
incorporado
import csv
with open("csvfile.csv", "wb") as file:
writer = csv.writer(file)
writer.writerows(text)
Simplemente escribiría cada línea en un archivo, ya que está en formato CSV:
write_file = "output.csv"
with open(write_file, "w") as output:
for line in text:
output.write(line + ''/n'')
Sin embargo, no puedo recordar cómo escribir líneas con saltos de línea en este momento: p
Además, es posible que desee ver
esta respuesta
sobre
write()
,
writelines()
y
''/n''
.