需求:
开始的时候,我是这样:
dir = (r'C:\\Users\\ShuoHui\\Desktop\\data\\')
workbook = open(dir + 'filename.csv')
workbookReader = csv.reader(workbook)
workbookData = list(workbookReader)
nRows = workbookReader.line_num
rowsNum = 1 # 行号
for rowsNum in range(1, nRows):
if workbookData[rowsNum][10] != 'xxx':
outsheet.write(rowsNum, 0, workbookData[rowsNum][4])
outsheet.write(rowsNum, 1, workbookData[rowsNum][10])
outsheet.write(rowsNum, 4, workbookData[rowsNum][9])
outsheet.write(rowsNum, 5, workbookData[rowsNum][2])
outsheet.write(rowsNum, 9, workbookData[rowsNum][0])
else:
continue
outworkbook.save(dir + "out\\filename.xlsx")
上面这种情况,可以输出想要的,但是会有空白行,于是我想说,加入一个 i 控制写入时候的行号,就是这样:
dir = (r'C:\\Users\\ShuoHui\\Desktop\\data\\')
workbook = open(dir + 'filename.csv')
workbookReader = csv.reader(workbook)
workbookData = list(workbookReader)
nRows = workbookReader.line_num
rowsNum = 1 # 行号
for rowsNum in range(1, nRows):
i = 1 #从第 2 行开始写入
if workbookData[rowsNum][10] != 'xxx':
outsheet.write(i, 0, workbookData[rowsNum][4])
outsheet.write(i, 1, workbookData[rowsNum][10])
outsheet.write(i, 4, workbookData[rowsNum][9])
outsheet.write(i, 5, workbookData[rowsNum][2])
outsheet.write(i, 9, workbookData[rowsNum][0])
i += 1
else:
continue
outworkbook.save(dir + "out\\filename.xlsx")
但是这样子,只会输出最后一行有效数据。 问题 1:以后我遇到这样循环的问题,怎么打断点排错(pycharm) 问题 2:我这个问题出在哪里。。。 ps: *** 小弟基础不好 ***,请各位大神不吝赐教,感谢大家。
1
jtr109 2020-04-17 08:57:38 +08:00 1
第二段代码「只会输出一行」是因为:for 循环每次都会执行一遍代码块(缩进部分)中的命令,所以每次循环都会把 i=1 执行一遍,所以一只在同一行反复输入。
上面一个「空白行」我没有理解是什么意思,如果需要打断点,可以注意 rowsNum 的值是否符合预期。特别是「第一行」应该是 1 还是 0 。 |
2
crella 2020-04-17 09:02:06 +08:00 via Android 1
错误原因:for 循环内每次循环,i 都被设置为 1
改进:i 放到 for 循环以前设置 i=1,如果满足什么!= 'xxx',则 outsheet 写入第 i 行,然后循环结束时设置 i+=1 |
5
yzlnew 2020-04-17 09:08:30 +08:00 1
如果经常处理这样的数据可以考虑使用 pandas
|
6
dobest 2020-04-17 09:10:10 +08:00 via iPhone 1
推荐使用 pandas 进行处理,读入 csv,删除特定行,然后 to_excel 写到 Excel
|
7
ShuoHui OP |
8
SjwNo1 2020-04-17 09:14:22 +08:00 1
第一个 outsheet 变量是啥,可以使用类似于 Worksheet.Rows(i).Delete() 的方法
第二个 循环定义初始变量 i,不过这样能否起效果就不得而知了 还有:重复变量声明 rowsNum = 1 是? (拙见~ |
10
no1xsyzy 2020-04-17 09:27:09 +08:00 1
python 的 csv 操作始终应打开自 open(..., newline='')
https://docs.python.org/3/library/csv.html#csv.reader 看脚注,一来如果内容有换行无法正常操作,二来如果你的平台行尾用的是 \r\n,则会发生空行 为 v2 的水平感到痛心,深深地感到惋惜 |
11
princelai 2020-04-17 11:36:08 +08:00 1
df = pd.read_csv('filename.csv')
df.query("col11name not in ['xxx']").to_exxcel("out\\filename.xlsx") 拿去吧 |