DÜZENLEME: Başlığa koydum, ancak vücutta bahsetmediğimi fark ettim. Bu, Windows'a özgü gibi görünüyor.Python'da bir .CSV dosyası yazmak, hem Python 2.7+ hem de Python 3.3+ Windows'ta çalışır.
Her iki Python 2.7 ve 3.3 ile çalışan bir komut dosyasında csv
Python modülünü kullanarak çıktı yazmakta zorlanıyorum.
Önce şunu deneyin:
TypeError: 'str' does not support the buffer interface
yüzden 'wb'
'wt'
değişir
with open('test.csv', 'wb') as csv_file:
writer = csv.DictWriter(csv_file, ['header1', 'header2'])
writer.writeheader()
for item in items:
writer.writerow(item)
Ancak, birlikte rüzgar ve çalışır, ancak şimdi dosyadaki her satırda fazladan boş bir satır var.
with open('test.csv', 'wt') as csv_file:
için:
düzeltmek için, ben değiştirmek
with open('test.csv', 'wt', newline='') as csv_file:
Ama şimdi, Python 2.7 kırar:
TypeError: 'newline' is an invalid keyword argument for this function
ben sadece böyle bir şey yapabileceğini biliyorum :
try:
with open('test.csv', 'wt', newline='') as csv_file:
writer = csv.DictWriter(csv_file, ['header1', 'header2'])
writer.writeheader()
for item in items:
writer.writerow(item)
except TypeError:
with open('test.csv', 'wb') as csv_file:
writer = csv.DictWriter(csv_file, ['header1', 'header2'])
writer.writeheader()
for item in items:
writer.writerow(item)
Bununla birlikte, bu ciddi olarak çok küçük bir kopyalamaya sahip.
Bunu daha temiz bir şekilde yapan var mı?
DÜZENLEME: Test verileri basittir ve hiçbir yeni satır ya da bir şey vardır:
items = [{'header1': 'value', 'header2': 'value2'},
{'header1': 'blah1', 'header2': 'blah2'}]
Sadece "wb" veya "wt" yerine "w'" kullanamaz mısınız? – nathancahill
Python 2'de betiği çalıştırırken dizeler 'item' listesindeki' unicode' dizgileri mi? Değerler her zaman ASCII midir, yoksa kodlanması gereken fazladan karakterler içerebilirler mi? Aynı kodu Python'un her iki sürümünde de çalıştırabilseniz bile, aynı sonuçları almayabilirsiniz! – Blckknght
@Blckknght - Test verilerini sorunun altına ekledim. Bu sadece ASCII metindir. – Tamerz