2015-08-20 23 views
0

好吧,所以我正在閱讀一個excel工作簿。我讀了一段時間的文件,並且在調試之後開始執行.csv文件,並在代碼下執行其他操作,我向您展示它已更改爲xlsx。我開始獲取IOError,但沒有找到這樣的文件或目錄。我想出了爲什麼,並將FFA.csv更改爲FFA.xlsx,並且它沒有錯誤。然後我開始做其他事情並進行調試。今天早上起牀,現在我得到以下錯誤:行包含NULL字節。奇怪,因爲代碼開始良好。現在它無法閱讀。我放入打印repr()進行調試,它現在打印NULL字節。那麼我如何解決這個問題,並在將來防止它呢?這裏是第一個200個字節:爲什麼Python的csvreader先啓動,然後生成空字節?

PK\x03\x04\x14\x00\x06\x00\x08\x00\x00\x00!\x00b\xee\x9dh^\x01\x00\x00\x90\x04\x00\x00\x13\x00\x08\x02[Content_Types].xml \xa2\x04\x02(\xa0\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00

import csv 

def readFile(): 
    count = 0 
    print repr(open("FFA.xlsx", "rb").read(200)) #dump 1st 200 bytes 
    with open("FFA.xlsx","rb") as csvfile: 
     FFAreader = csv.reader(csvfile, delimiter=",") 
     for row in FFAreader: 
      idd = row[0] 
      name = row[1] 
      pos = row[2] 
      team = row[3] 
      pts = row[4] 
      oecr = row[5] 
      oR = row[6] 
      posR = row[7] 
      up = row[8] 
      low =row[9] 
      risk = row[10] 
      swing = row[11] 
readFile() 
+0

呃,.xlsx不是csv文件。它是一個包含多個xml和其他文件的zip文件。你正在閱讀二進制垃圾。 –

+0

好吧,就像我說我只是改變它,因爲它似乎改變了自己,但它一直工作得很好。我將其更改回.csv,但仍然收到錯誤消息。然而,前200字節已變爲 –

+0

這是現在的第一個200字節'playerId,玩家名,位置,團隊,積分,總ECR,總排名,排名排名,上排排排序,下排排排排排排排排排排排排排排排排序,104.896,245,979,16,165.7802,92.0755,4.0319,73.7047 \ r \ n2543501,Aaron Colvin,DB,JAC' –

回答

0

我與馬克同意,我做了一個訓練演習導入Excel文件,我覺得熊貓庫會在這種情況下,幫助在那裏你可以將pandas導入爲pd,並使用pd.read_excel(file_name)作爲data_processing函數的一部分,如read_file()後導入。

1

您發佈的代碼有一個小而危險的錯誤,因爲您打開文件句柄兩次就會漏掉。

1)您正在打開文件並從中讀取200個字節,但沒有關閉它。 2)然後,您可以通過上下文管理器以適當的方式打開文件,該文件實際上可以從中讀取任何內容。

一些問題,可以幫助你調試問題:

  • 是您打開存儲在network'd資源文件? (CIFS,NFS等)
  • 您是否檢查過該文件未被其他進程打開? LSF可以幫助你檢查。
  • 這是在Windows或Linux上運行嗎?你可以在Linux下測試,如果它發生在Windows中,反之亦然?

我忘記提及您不應該使用CSV來處理與Excel相關的任何事情,即使該文件似乎是CSV數據。使用XLRD模塊(https://pypi.python.org/pypi/xlrd),它是跨平臺的,從0.8版開始,可以打開和讀取完美的XSL和XSLX文件。

這一小段代碼將告訴你如何打開工作簿,並在基本的方式對其進行分析:

import xlrd 

def open_excel(): 
    with xlrd.open_workbook('FFA.xlsx') as wb: 
     sh = wb.sheet_by_name('Sheet1') 
     for rownum in xrange(sh.nrows): 
     [Do whatever you need here] 
+0

嗯,我在Windows中做的,我第一次打開它的主要原因是爲了調試目的,查看不在正常代碼中的空字節。我也沒有遇到過這個問題。不,我不能在Linux中測試。在將.csv文件轉換爲'playerId,玩家名,位置,團隊,積分,總體ECR,總體排名,排名排名,最高排位,最低排位,風險,揮杆等字節後指出這一點很重要。\ r \ n100029,49ers ,DST,SF,104.896,245,979,16,165.7802,92.0755,4.0319,73.7047 \ r \ n2543501,Aaron Colvin,DB,JAC'這意味着\ r \ n是在沒有數據的小區中產生的。 –

+0

由於我編輯了我的答案,請看我的評論;嘗試xlrd,它應該馬上工作。 – mydaemon

+0

那麼必須輸入什麼信息才能使用xlrd打開文件? –

0

所以這就是我所做的。但我有學習xlrd方法,我有模塊,但沒有文檔。這不會產生錯誤信息。仍然不知道爲什麼它從.csv更改爲xlsx,但現在它的工作。 xlrd中的腳本是什麼?

import csv 
def readFile(): 
    count = 0 
    #print repr(open("FFA.csv", "rb").read(200)) #dump 1st 200 bytes check if null values produced. 
    with open("FFA.csv","rb") as csvfile: 
     FFAreader = csv.reader(csvfile, delimiter=",") 
     for row in FFAreader: 
      idd = row[0] 
      name = row[1] 
      pos = row[2] 
      team = row[3] 
      pts = row[4] 
      oecr = row[5] 
      oR = row[6] 
      posR = row[7] 
      up = row[8] 
      low =row[9] 
      risk = row[10] 
      swing = row[11] 
readFile() 
+0

請檢查我的原始答案,我已經添加了關於如何打開文件並執行最小解析的示例。如果您有興趣將其解析爲csv,則可以使用xlrd將xslx轉換爲CSV,然後使用CSV解析它。看到這個問題的答案:http://stackoverflow.com/questions/17314062/how-to-convert-xml-to-csv-using-xsl – mydaemon

+0

對不起,上面的鏈接是錯誤的,這是正確的:http ://stackoverflow.com/questions/9884353/xls-to-csv-convertor – mydaemon

相關問題