You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux系统下如何消除Python 3 CSV写入器生成的空行

问题

我需要将视频帧分析生成的数据写入CSV文件:先收集每个视频的元数据到数组vid_data,再存入总列表data_list;之后还要写入Contractions和TimeIntervals两列。

我的代码如下:

def writing_to_cvs():

    # open the file in 'writing' mode
    with open("output.csv", 'w', newline='', encoding='utf-8') as csv_file:

        # create a writer object
        writer = csv.writer(csv_file, lineterminator='\n')

        # write out the headers for the columns of the CSV file
        writer.writerow(["Video filename","Duration","FrameRate","NumFrames","Height","Width","Contractions","TimeIntervals"])

        # using a two-dimensional list where
        # every sublist represents a row in the CSV
        #print("the row:", data_list)

        for vid_data in data_list:
            writer.writerow(vid_data)

        for contra in contractions_list:
            for c in contra:
                writer.writerow([''] * 6 + [c])

        for inter in time_intervals:
            #print('time:', inter)
            writer.writerow([''] * 7 + [inter])

现在的问题是每次调用writerow时,行与行之间都会出现空行,生成的CSV有大量空行。我已经尝试设置newline=''和lineterminator='\n',但没有效果。我用的是Linux系统、Python 3.10版本,请问该如何解决这个空行问题?

解决方案

1. 避免重复设置换行相关参数

在Linux环境下,csv.writer默认的行终止符就是\n,同时设置open的newline=''和csv.writer的lineterminator='\n'会触发双重换行处理。只需保留open时的newline='',去掉lineterminator参数即可:

writer = csv.writer(csv_file)

2. 清理数据中的无效元素

检查contractions_list和time_intervals,如果其中包含空字符串、仅含空格的元素或自带换行符的内容,写入时会生成空行。可以提前过滤这类无效数据:

# 清理收缩数据,过滤空元素
cleaned_contractions = [c for contra in contractions_list for c in contra if c.strip()]
# 清理时间间隔数据
cleaned_intervals = [inter for inter in time_intervals if inter.strip()]

3. 统一整理后批量写入

把所有要写入的行先整理成一个完整列表,再用writerows批量写入,减少IO操作的同时避免换行异常:

def writing_to_cvs():
    # 整理所有行数据
    all_rows = []
    # 添加表头
    all_rows.append(["Video filename","Duration","FrameRate","NumFrames","Height","Width","Contractions","TimeIntervals"])
    # 添加视频元数据
    all_rows.extend(data_list)
    # 添加过滤后的收缩数据
    for contra in contractions_list:
        for c in contra:
            if c.strip():
                all_rows.append([''] * 6 + [c])
    # 添加过滤后的时间间隔数据
    for inter in time_intervals:
        if inter.strip():
            all_rows.append([''] * 7 + [inter])
    
    # 写入文件
    with open("output.csv", 'w', newline='', encoding='utf-8') as csv_file:
        writer = csv.writer(csv_file)
        writer.writerows(all_rows)

4. 强制指定行终止符(备选)

如果以上方法无效,可以手动指定lineterminator='\n',同时保留open的newline='',这种写法在Linux下也能稳定避免额外空行:

writer = csv.writer(csv_file, lineterminator='\n')

内容的提问来源于stack exchange,提问作者Inês

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:35:16