2012-02-19 64 views
5

我有了這樣的Python的CSV模塊 - 報價失蹤

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 

數據我讀這篇文章,然後寫不同行不同的CSV文件,CSV文件。

但是,在原始數據中有非數字字段的引號,因爲其中一些字段中包含逗號。

我無法保留報價。

我已經研究了很多,發現了quoting=csv.QUOTE_NONNUMERIC但是現在每個字段都會出現一個引號,我不知道爲什麼?

如果我嘗試像MINIMAL這樣的其他引用選項之一,我最終會得到關於日期值2008-01-09的錯誤消息,而不是浮動。

我試圖創建一個方言,在csv閱讀器和編寫器上添加引號,但沒有任何我嘗試過的結果與原始數據完全匹配。

任何人都有這個相同的問題,並找到了解決辦法。

+2

來源中的引用不一致。 – 2012-02-19 22:27:16

+0

在源文件中,正如我所描述的那樣,在非數字附近引用了引號。這是一致的 – tjmgis 2012-02-19 23:01:37

+0

日期不是數字。一旦你閱讀它,什麼都不是數字。 – 2012-02-19 23:12:53

回答

7

編寫時,quoting=csv.QUOTE_NONNUMERIC保持值不加引號,只要它們是數字,即。如果他們的類型是intfloat(例如),這意味着它會寫你期望的。

你的問題可能是,閱讀時,一個csv.reader會變成每一行讀取到list一個字符串(如果你閱讀文檔不夠仔細,你會看到一個閱讀者執行自動數據閱讀後類型轉換!

如果不執行任何種類的轉換的,那麼當你寫你最終會與報價的一切......因爲你寫的一切是一個字符串。

編輯:當然,日期字段將被引用,因爲它們是而不是數字,這意味着使用標準csv.writer無法獲得確切的預期行爲。

0

試圖獲得原始數據的「完全匹配」是一項艱鉅且潛在的努力。 quoting=csv.QUOTE_NONNUMERIC在所有內容中都加上了引號,因爲每個字段在讀入時都是字符串。

您擔心某些「引號」輸入字段可能帶逗號,這通常不是什麼大不了的事情。如果您向某個引用字段添加了逗號並使用了默認書寫器,則帶有逗號的字段將在輸出中自動引用。

1

你確定你有問題嗎?您所描述的行爲是正確的:csv模塊僅在需要正確解析它們時纔將字符串括在引號中。所以你應該期望看到只有包含逗號,換行符等字符串的引號。除非你在讀取輸出時遇到錯誤,否則沒有問題。