2013-04-09 23 views
9

Tôi đã thử nhiều giải pháp để thêm tiêu đề vào tệp csv của mình nhưng không có gì hoạt động đúng cách. Dưới đây là:Làm cách nào để thêm tiêu đề vào tệp csv bằng Python?

  1. Tôi đã sử dụng phương pháp ghi, nhưng dữ liệu của tôi ghi đè hàng đầu tiên.

  2. Tôi đã sử dụng phương pháp DictWriter, nhưng tôi không biết cách điền chính xác. Đây là mã của tôi:

    csv = csv.DictWriter(open(directory +'/csv.csv', 'wt'), fieldnames = ["stuff1", "stuff2", "stuff3"], delimiter = ';') 
    csv.writeheader(["stuff1", "stuff2", "stuff3"]) 
    

tôi nhận được một "2 đối số thay vì một" lỗi và tôi thực sự không biết tại sao.

Bạn có lời khuyên nào không?

Trả lời

20

Tất cả bạn cần làm là gọi DictWriter.writeheader() không có đối số:

with open(os.path.join(directory, 'csv.csv'), 'wb') as csvfile: 
    writer = csv.DictWriter(csvfile, fieldnames = ["stuff1", "stuff2", "stuff3"], delimiter = ';') 
    writer.writeheader() 

Bạn đã nói DictWriter() những gì tiêu đề của bạn.

+1

Umm - là 't' một 'chế độ open' hợp lệ? –

+0

@JonClements: Tôi không chú ý đến chế độ này; chỉ cần sao chép từ OP. Đã sửa. –

+2

LoạiError: 'tên trường' là một đối số từ khóa không hợp lệ cho hàm này, tôi đang sử dụng Python 2.6, PyQt4.7. Bạn có thể giúp? – Aleksandar

2

Tôi gặp sự cố tương tự khi ghi tệp CSV. Tôi phải đọc tệp csv và sửa đổi một số trường trong đó. Để viết tiêu đề trong file CSV, tôi sử dụng đoạn mã sau:

reader = csv.DictReader(open(infile)) 
headers = reader.fieldnames 

with open('ChartData.csv', 'wb') as outcsv: 
    writer1 = csv.writer(outcsv) 
    writer1.writerow(headers) 

và khi bạn viết các hàng dữ liệu, bạn có thể sử dụng một DictWriter theo cách sau

writer = csv.DictWriter(open("ChartData.csv", 'a'), headers) 

Ở phía trên mã số "a" là viết tắt của gắn thêm.

Tóm lại -> sử dụng một để thêm dữ liệu csv sau khi bạn đã viết tiêu đề của bạn với cùng tập tin

+1

Tại sao tạo một 'csv.writer()' riêng biệt trước, sau đó mở * cùng một tệp * để nối thêm với một 'csv.DictWriter()'? Chỉ cần sử dụng 'writer = csv.DictWriter (outcsv, fieldnames = headers)', sau đó 'writer.writeheader()'. –