2012-02-19 38 views
5

Tôi có một tập tin CSV có dữ liệu như thế nàymô-đun Python CSV - dấu ngoặc kép đi mất tích

15,"I",2,41301888,"BYRNESS RAW","","BYRNESS VILLAGE","NORTHUMBERLAND","ENG" 
11,"I",3,41350101,2,2935,2,2008-01-09,1,8,0,2003-02-01,,2009-12-22,2003-02-11,377016.00,601912.00,377105.00,602354.00,10 

Tôi đang đọc bài viết này và sau đó viết hàng khác nhau các tập tin CSV khác nhau.

Tuy nhiên, trong dữ liệu gốc có dấu ngoặc kép xung quanh các trường không phải là số, vì một số có chứa dấu phẩy trong trường.

Tôi không thể giữ dấu ngoặc kép.

Tôi đã nghiên cứu rất nhiều và phát hiện ra quoting=csv.QUOTE_NONNUMERIC tuy nhiên điều này bây giờ dẫn đến dấu ngoặc kép xung quanh mọi trường và tôi không biết tại sao ??

Nếu tôi thử một trong các tùy chọn trích dẫn khác như MINIMAL tôi kết thúc với một thông báo lỗi liên quan đến giá trị ngày, 2008/01/09, không phải là một phao.

Tôi đã cố gắng để tạo ra một phương ngữ, thêm trích dẫn vào người đọc csv và nhà văn nhưng không có gì tôi đã cố gắng kết quả trong việc kết hợp chính xác với dữ liệu gốc.

Bất kỳ ai cũng gặp vấn đề tương tự này và tìm thấy giải pháp.

+2

Trích dẫn trong nguồn không phù hợp để bắt đầu. –

+0

Trong nguồn có dấu ngoặc kép chỉ xung quanh số không như tôi đã mô tả.Điều này là nhất quán – tjmgis

+0

Ngày không phải là số. Và không có gì là số khi bạn đọc nó. –

Trả lời

7

Khi viết, quoting=csv.QUOTE_NONNUMERIC giữ giá trị không được bỏ phiếu miễn là chúng là số, ví dụ: nếu kiểu của chúng là int hoặc float (ví dụ), có nghĩa là nó sẽ viết những gì bạn mong đợi.

Vấn đề của bạn có thể là, khi đọc sách, một csv.reader sẽ biến mỗi hàng nó đọc vào một list của chuỗi (nếu bạn đọc tài liệu một cách cẩn thận đủ, bạn sẽ thấy một người đọc không không thực hiện dữ liệu tự động loại chuyển đổi!

Nếu bạn không thực hiện bất kỳ loại chuyển đổi sau khi đọc, sau đó khi bạn viết bạn sẽ kết thúc với tất cả mọi thứ trên dấu ngoặc kép ... bởi vì tất cả mọi thứ bạn viết là một chuỗi.

Chỉnh sửa: tất nhiên, các trường ngày tháng sẽ được trích dẫn vì chúng là số không phải là số, có nghĩa là bạn không thể nhận được hành vi mong đợi chính xác bằng cách sử dụng tiêu chuẩn csv.writer.

0

Cố gắng để có được "kết hợp chính xác" của dữ liệu gốc là một nỗ lực khó khăn và có khả năng không kết quả. quoting=csv.QUOTE_NONNUMERIC đặt dấu ngoặc kép xung quanh mọi thứ vì mỗi trường là một chuỗi khi bạn đọc nó.

Bạn quan tâm rằng một số trường nhập "được trích dẫn" có thể có dấu phẩy thường không phải là một giao dịch lớn. Nếu bạn đã thêm dấu phẩy vào một trong các trường được trích dẫn của mình và sử dụng trình ghi mặc định, trường có dấu phẩy sẽ được tự động trích dẫn ở đầu ra.

1

Bạn có chắc chắn mình gặp sự cố không? Hành vi bạn mô tả là chính xác: Mô-đun csv sẽ chỉ đính kèm các chuỗi trong dấu ngoặc kép chỉ khi cần thiết để phân tích cú pháp chính xác. Vì vậy, bạn sẽ mong đợi để xem dấu ngoặc kép chỉ xung quanh chuỗi có chứa dấu phẩy, dòng mới, v.v. Trừ khi bạn nhận được lỗi đọc đầu ra của bạn trở lại, không có vấn đề gì.

Các vấn đề liên quan