#!/usr/env python3 import csv csv.field_size_limit(500 * 1024 * 1024) with open('E:/研究生学习/python数据/图书数据/bookinfo_tmall_201701.csv','r',encoding='UTF-8') as csv_in_file: with open('E:/研究生学习/python数据/图书数据/bookinfo_repair.csv','w',encoding='UTF-8') as csv_out_file: filereader=csv.reader(csv_in_file) filewriter=csv.writer(csv_out_file) header=next(filereader) filewriter.writerow(header) for row_list in filereader: row_list[9]=str(row_list[9]).strip('元')
filewriter.writerow(row_list)
结果如图所示:
改正后的代码:
#!/usr/env python3 import csv csv.field_size_limit(500 * 1024 * 1024) with open('E:/研究生学习/python数据/图书数据/bookinfo_tmall_201701.csv','r',encoding='UTF-8',newline='') as csv_in_file: with open('E:/研究生学习/python数据/图书数据/bookinfo_repair.csv','w',encoding='UTF-8',newline='') as csv_out_file: filereader=csv.reader(csv_in_file) filewriter=csv.writer(csv_out_file) header=next(filereader) filewriter.writerow(header) for row_list in filereader: row_list[9]=str(row_list[9]).strip('元') filewriter.writerow(row_list)
结果如图所示:
这个问题的解决方法是在open()中加一个newline=''即可。关于newline参数有下面的解释说明:
参数newline是用来控制文本模式之下,一行的结束字符。可以是None,’’,\n,\r,\r\n等。
当在读取模式下,如果新行符为None,那么就作为通用换行符模式工作,意思就是说当遇到\n,\r或\r\n都可以作为换行标识,并且统一转换为\n作为文本输入的换行符。当设置为空’’时,也是通用换行符模式工作,输入什么样的,就保持原样全输入。当设置为其它相应字符时,就会判断到相应的字符作为换行符,并保持原样输入到文本。
当在输出模式时,如果新行符为None,那么所有输出文本都是采用\n作为换行符。如果设置为’’或者\n时,不作任何的替换动作。如果是其它字符,会在字符后面添加\n作为换行符。