Avcının kod burada benim için çalıştı ABD, ama Polonya, benim, Windows Bölge ve Dil ayarlarını değiştirdiyseniz öyle değil ve ben senin sorunu yeniden nihayet güçlü oldu. Bu @ayhan göre
çünkü okuma ve ,
Polonya'da olduğu gibi ondalık ayırıcı (ondalık işareti) olarak kullanılır yerellerde CSV dosyalarını kaydederken bu sınırlayıcı olmaya ;
beklediğini Excel'de bir hata olduğunu (ve dünyanın geri kalanının çoğu). Muhtemelen
en kolay iş-etrafında csv.writer
nesne oluşturmak aşağıda gösterildiği gibi sadece Excel bölgenizdeki beklediği sınırlayıcıyı belirtmek geçerli: file.csv
ait
#!/usr/bin/env python3
import csv
list_of_lists = [['edytor poranka PN', '1/04/2016', '15:00'],
['edytor PN 2', '2/04/2016', '08:30'],
['edytor PN noc', '3/04/2016', '22:00']]
with open('file.csv', 'w', newline='') as f:
writer = csv.writer(f, delimiter=';')
for sublist in list_of_lists:
writer.writerow(sublist)
İçeriği Komut dosyasını çalıştırdıktan sonra:
edytor poranka PN;1/04/2016;15:00
edytor PN 2;2/04/2016;08:30
edytor PN noc;3/04/2016;22:00
Daha sonra, Microsoft Excel 2013'te açtığımda, Windows Formatı ve Konumum Windows Bölge ve Dil kontrol panelinde "Polonya" olarak ayarlanmışsa, aşağıdakileri görüyorum (şimdi doğru):
Güncelleme
bir çakışma olursa dinamik komut geçerli yerel ayarlarına göre kullanılacak ne sınırlayıcı belirlemek ve farklı bir şey almak olacaktır yapmanın bir yolu - hardcoding rağmen ;
, ondalık işareti olarak kullanmayan herhangi bir yerde çalışmalıdır (ve bunu yapan birinin farkında değilim).
Sorunun nedenini biliyor olduğumuzdan beri, for
loop Slayer'ı kullanıma sunup, writerows()
kullanılan kodunuzun sürümüne geri döneceğim.
import csv
import locale
# Chose an Excel compatible csv delimiter.
locale.setlocale(locale.LC_ALL, '')
DELIMITER = ';' if locale.localeconv()['decimal_point'] == ',' else ','
list_of_lists = [['edytor poranka PN', '1/04/2016', '15:00'],
['edytor PN 2', '2/04/2016', '08:30'],
['edytor PN noc', '3/04/2016', '22:00']]
with open('file.csv', 'w', newline='') as f:
writer = csv.writer(f, delimiter=DELIMITER)
writer.writerows(list_of_lists)
İyi öneri yok, ancak OP zaten listede i için 'çalıştığını söyledi:' 'writer.writerow (i)'. – martineau
OP bunu denediklerini ancak her satırın boş bir satırda ayrıldığını söyledi. Bu yüzden çalışmıyordu. Yeni satırlar 'newline' parametresi – Pythonista
Teşekkürler ayarlanmadığı için eklenir. newline boş satırlarla yardımcı oldu, ancak yine de tek bir hücrede. –