python3中使用csv模块的csv.writerow()产生的空行问题

#!/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作为换行符。

 
 





Python中,`csv_writer.writerow()` 是 `csv` 模块里用来将一行数据写入CSV文件的方法。 ### 使用方法 一般先借助 `csv.writer()` 函数创建一个 `csv_writer` 对象,再调用 `writerow()` 方法把一行数据写入文件。以下是示例代码: ```python import csv # 定义要写入的数据 data = ['Name', 'Age', 'City'] # 打开文件并创建csv_writer对象 with open('example.csv', 'w', newline='') as file: writer = csv.writer(file) # 写入一行数据 writer.writerow(data) ``` 在这个示例中,先定义了一行数据 `data`,接着打开 `example.csv` 文件,创建 `csv_writer` 对象,最后调用 `writerow()` 方法把 `data` 写入文件。 ### 功能 `csv_writer.writerow()` 方法的主要功能是把一个可迭代对象(像列表、元组等)里的数据作为一行写入CSV文件。每个元素会被当作一个字段,元素间用逗号分隔。 ### 相关注意事项 1. **空行问题**:在Windows系统中,若打开文件时没有指定 `newline=''`,使用 `writerow()` 方法写入数据时每行后可能会多一个空行。解决办法是在打开文件时加上 `newline=''` 参数,示例如下: ```python import csv file_write = open("positive_example.csv", "w", newline='') writer = csv.writer(file_write) fileHeader = ['Column1', 'Column2'] writer.writerow(fileHeader) ``` 2. **文件缓冲问题**:`writerow()` 方法实际上会写行,但由于文件缓冲,可能无法立刻在文件里看到写入的内容。若想查看文件中的内容,可以关闭文件或者调用 `.flush()` 方法。如果使用 `with` 语句,即便出现错误,文件也会自动关闭: ```python import csv data = ['Name', 'Age'] with open('test.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerow(data) # 文件会在with语句结束时自动关闭 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值