Python menulis ke CSV baris demi baris

Saya memiliki data yang sedang diakses melalui http request dan dikirim kembali oleh server dalam format comma separated, saya punya kode berikut :

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)

Isi teks adalah sebagai berikut:

april,2,5,7
may,3,5,8
june,4,7,3
july,5,6,9

Bagaimana saya bisa menyimpan data ke file CSV. Aku tahu aku bisa melakukan sesuatu di sepanjang baris berikut untuk iterate baris demi baris:

import StringIO
s = StringIO.StringIO(text)
for line in s:

Tapi aku'm tidak yakin bagaimana untuk sekarang benar menulis setiap baris ke CSV

EDIT---> Terima kasih untuk umpan balik seperti yang disarankan larutan agak sederhana dan dapat dilihat di bawah ini.

Solusi:

import StringIO
s = StringIO.StringIO(text)
with open('fileName.csv', 'w') as f:
    for line in s:
        f.write(line)
Mengomentari pertanyaan (4)
Larutan

Cara umum:

##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')

ATAU

Menggunakan CSV penulis :

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)

ATAU

Cara paling sederhana:

f = open('csvfile.csv','w')
f.write('hi there\n') #Give your csv text here.
## Python will convert \n to os.linesep
f.close()
Komentar (5)

Anda hanya bisa menulis ke file seperti yang anda akan menulis file normal.

with open('csvfile.csv','wb') as file:
    for l in text:
        file.write(l)
        file.write('\n')

Jika hanya dalam kasus, ini adalah daftar dari daftar, anda bisa langsung menggunakan built-in csv modul

import csv

with open("csvfile.csv", "wb") as file:
    writer = csv.writer(file)
    writer.writerows(text)
Komentar (0)

Saya hanya akan menulis setiap baris ke file, karena itu's sudah dalam format CSV:

write_file = "output.csv"
with open(write_file, "w") as output:
    for line in text:
        output.write(line + '\n')

Saya dapat't ingat bagaimana menulis garis dengan garis-istirahat pada saat ini, meskipun :p

Juga, anda mungkin ingin mengambil melihat jawaban tentang write(), writelines(), dan &#39;\n&#39;.

Komentar (0)

Untuk melengkapi jawaban sebelumnya, aku dikocok sampai cepat kelas untuk menulis ke file CSV. Itu membuat lebih mudah untuk mengelola dan menutup file yang terbuka dan mencapai konsistensi dan kode bersih jika anda harus berurusan dengan beberapa file.

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

Contoh penggunaan:

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()))

Bersenang-senang

Komentar (0)

Bagaimana dengan ini:

with open("your_csv_file.csv", "w") as f:
    f.write("\n".join(text))

str.join() Mengembalikan sebuah string yang merupakan concatenation dari string di iterable. pemisah antara unsur-unsur adalah string menyediakan metode ini.

Komentar (0)