在Python中没有string格式的读取CSV

我有一个CSV文件,我想阅读这个单元格,以便我可以写入到Excel中。 我正在使用csv.reader并枚举结果,以便我可以将值放入Excel中相应的单元格。

使用当前的代码,一旦枚举值变成了string。 如果我写入excel sheet.write(rowi,coli,value) ,所有的单元格被格式化为文本。 我不能这样做,因为我需要在以后总结列,他们需要被视为数字

例如,我的文本文件将具有:1,a,3,4.0,5,6,7

第一次枚举后,第一行:(0,'1,a,3,4.0,5,6,7')

第二次枚举后,第一行的第一列:(0,0,'1')

问题:如何读取此csv文件以产生(0,0,1)(等)?

以下是我正在使用的一些代码:

 import csv, xlwt with open('file.csv', 'rb') as csvfile: data = csv.reader ((csvfile), delimiter=",") wbk= xlwt.Workbook() sheet = wbk.add_sheet("file") for rowi, row in enumerate(data): for coli, value in enumerate(row): sheet.write(rowi,coli,value) #print(rowi,coli,value) gives (rowi, coli, 'value') 

 import csv, xlwt with open('file.csv', 'rb') as csvfile: data = csv.reader ((csvfile), delimiter=",") wbk= xlwt.Workbook() sheet = wbk.add_sheet("file") for rowi, row in enumerate(data): for coli, value in enumerate(row): sheet.write(rowi,coli,value) wbk.save("workbook_file") 

即使print(rowi,coli,value)显示“value”,输出文件中的单元格也会显示为不带引号。

如果你的数据格式为1,2,3 1, 2, 3而不是1,2,3 ,那么在你for coli, value in enumerate(row):后面包含这个for coli, value in enumerate(row):行:

value = value.lstrip(" ")

那么我认为python的csv模块仍然缺乏一个水晶球…更严重的是,在csv文件中没有指示variablestypes,整数,浮点数,string或date。 默认情况下,Reader会转换string列表中的一行。

如果你想要一些列是整数,你可以添加到你的脚本的布尔列表。 假设你有4列,第三个是整数

 int_col = [ false, false, true, false ] ... for rowi, row in enumerate(data): for coli, value in enumerate(row): val = int(value) if int_col(coli) else value sheet.write(rowi,coli,val) 

您也可以尝试猜测哪些列是整数,读取n行(例​​如n = 10),并说您findn整数的每列都将整列视为整列。

或者你甚至可以想象一个2遍操作:首先确定列的types,然后插入。

我发现Python的标准库函数有点缺乏处理CSV文件。 我更喜欢在可能的情况下和pandas一起工作。

 import xlwt from pandas.io.parsers import read_csv df = read_csv('file.csv') #number the columns sequentially df.columns = [i for i, e in enumerate(df.columns)] #unstack the columns to make 2 indices plus a column, make row come before col, #sort row major order, and then unset the indices to get a DataFrame newDf = df.unstack().swaplevel(0,1).sort_index().reset_index() #rename the cols to reflect the types of data newDf.columns = ['row', 'col', 'value'] #write to excel newDf.to_excel('output.xls', index=False) 

这也将保持行号和列号为整数值。 我拿了一个例子CSV文件和rowcol都是整数值,而不是string。