
需求:
开始的时候,我是这样:
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 第二段代码「只会输出一行」是因为:for 循环每次都会执行一遍代码块(缩进部分)中的命令,所以每次循环都会把 i=1 执行一遍,所以一只在同一行反复输入。 上面一个「空白行」我没有理解是什么意思,如果需要打断点,可以注意 rowsNum 的值是否符合预期。特别是「第一行」应该是 1 还是 0 。 |
2 crella 2020-04-17 09:02:06 +08:00 via Android 错误原因:for 循环内每次循环,i 都被设置为 1 改进:i 放到 for 循环以前设置 i=1,如果满足什么!= 'xxx',则 outsheet 写入第 i 行,然后循环结束时设置 i+=1 |
5 yzlnew 2020-04-17 09:08:30 +08:00 如果经常处理这样的数据可以考虑使用 pandas |
6 dobest 2020-04-17 09:10:10 +08:00 via iPhone 推荐使用 pandas 进行处理,读入 csv,删除特定行,然后 to_excel 写到 Excel |
7 ShuoHui OP |
8 SjwNo1 2020-04-17 09:14:22 +08:00 第一个 outsheet 变量是啥,可以使用类似于 Worksheet.Rows(i).Delete() 的方法 第二个 循环定义初始变量 i,不过这样能否起效果就不得而知了 还有:重复变量声明 rowsNum = 1 是? (拙见~ |
10 no1xsyzy 2020-04-17 09:27:09 +08:00 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 df = pd.read_csv('filename.csv') df.query("col11name not in ['xxx']").to_exxcel("out\\filename.xlsx") 拿去吧 |