我遇到了一个问题,我在 .xls 文件中有一些数据(下面的示例)。
A B C D E F
John Smith 8:00AM 9:00AM 10:00AM 5:00PM 8.00
当我使用 Python CSV 模块将其写入 csv 时,它显示为
John,Smith,0.333333333,0.375,0.416666667,0.708333333,0.333333333
现在有趣的部分是,如果我手动将 xls 文件保存为 MSDOS csv,我会得到所需的输出
John,Smith,8:00 AM,9:00 AM,10:00 AM,5:00 PM,8:00
这是我正在运行的功能。它有点混乱,所以我提前道歉。
def csv_gen(filepath, saveto):
for files in glob.glob("*.xls"):
shutil.copy(filepath + "\\" + files, saveto)
with xlrd.open_workbook(files) as wb:
sh = wb.sheet_by_index(0)
newfile = saveto + files[:-4] + '.csv'
now = datetime.datetime.now()
dates = now.strftime("%m-%d-%Y")
filestart = [saveto + files]
time = [dates]
with open(newfile, 'wb') as f:
c = csv.writer(f,delimiter=',')
list = range(sh.nrows)
last = range(sh.nrows)[-1]
list.remove(0)
list.remove(3)
list.remove(2)
list.remove(1)
list.remove(last)
#Iterate through data and show values of the rows
for r in list:
lines = sh.row_values(r)
del lines[:4]
stuff = lines + filestart + time
#Remove blanks so csv doesnt have uneeded data
if lines[0] is '':
del stuff[:]
#Write to csv file with new data
if any(field.strip() for field in stuff):
c.writerow(stuff)
shutil.move(newfile, mergeloc)
我不明白为什么会这样。我尝试将方言标志添加到 csv 编写器为“excel”,但输出仍然相同。
更新:
如果我将文档保存为 csv,那么workBook.SaveAs(test.csv, 24)
编码 24 用于 MSDOS。我得到了所需的输出
John,Smith,8:00 AM,9:00 AM,10:00 AM,5:00 PM,8:00
但是当 csv 模块抓住它并删除一些空白行并在最后删除一些东西时,它会写出这些行,这就是我再次得到小数的时候
John,Smith,0.333333333,0.375,0.416666667,0.708333333,0.333333333
csv 模块的目的是修改行和删除空白行。
更新
for r in list:
cells = sh.row_values(r)
csv_row = cells[0] for col_value in cells[1:]:
csv_row.append(datetime.time(*xlrd.xldate_as_tuple(col_value, 0)[3:]))
添加 row_values 以仅返回单元格的值,而不是 xldata:0.33333。然后添加一个 * 以使传递成为位置参数。