我正在從互聯網下載一個xls文件。它採用.xls格式,但我需要'Sheet1'以csv格式。我使用xlrd進行轉換,但似乎遇到了我寫入的文件爲空的問題?python xlrd:使用臨時文件將xls轉換爲csv。 Tempfile爲空
import urllib2
import tempfile
import csv
import xlrd
url_2_fetch = ____
u = urllib2.urlopen(url_2_fetch)
wb = xlrd.open_workbook(file_contents=u.read())
sh = wb.sheet_by_name('Sheet1')
csv_temp_file = tempfile.TemporaryFile()
with open('csv_temp_file', 'wb') as f:
writer = csv.writer(f)
for rownum in xrange(sh.nrows):
writer.writerow(sh.row_values(rownum))
這似乎工作。但現在我想通過做檢查值以下:
with open('csv_temp_file', 'rb') as z:
reader = csv.reader(z)
for row in reader:
print row
但我得到什麼:
>>> with open('csv_temp_file', 'rb') as z:
... reader = csv.reader(z)
... for row in reader:
... print row
...
>>>
我使用的是臨時文件,因爲我想要做的內容的更多分析,然後使用SQLAlchemy將csv post的內容更多地解析到mySQL數據庫中。
我很感激幫助。謝謝。
非常感謝。這就像一個魅力!謝謝!! – codingknob 2013-03-17 02:06:21
問題:如果我在遠離main()主體的函數中執行xls_2_csv轉換,我應該在函數或main()主體中創建tempfile並將其傳遞給xls_2_csv函數進行操作,之後我可以返回它並分配給另一個變量?這會工作嗎?我很欣賞你*最好的*編碼練習建議。 :) – codingknob 2013-03-17 02:38:49
如果您詢問最佳做法,我根本不會使用臨時文件。我只是將文件讀入數組'data = [sh.row_values(r)for r in range(sh.nrows)]'並返回數組。然後一些其他代碼可以執行處理和插入。 – Tobia 2013-03-17 10:42:56