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

Bash for循环无法写入文件:为何无法逐次为foo.csv追加列?

Bash循环覆盖文件问题分析与Python实现方案

问题原因解析

你用的Bash循环之所以丢失原foo.csv内容、仅保留最后一个文件的第5列,核心原因是Bash重定向的执行顺序:
执行paste foo.csv <(cut -f 5 $skra) > foo.csv时,Bash会优先处理输出重定向> foo.csv——这一步会直接清空foo.csv文件,再执行前面的paste命令。此时paste读取的已是被清空后的foo.csv,所以每次循环后,foo.csv只会保留当前txt文件提取出的第5列,循环结束后自然只剩最后一个文件的结果,原内容完全丢失。

补充背景:所有涉及的文件均为制表符分隔,初始foo.csv仅包含一列数据。

实现需求的Python脚本

以下是能实现“给初始文件逐次添加各txt文件第5列”需求的Python脚本(含中文注释):

import pandas as pd

# 存储每个文件提取的列数据
column_list = []

# 读取window.list中的文件名列表
with open('window.list') as f:
    for line in f:
        # 去除文件名前后的空白字符(如换行符)
        file_name = line.strip()
        # 读取制表符分隔的文件,仅取第5列(索引为4,pandas从0开始计数),以文件名作为列名
        df = pd.read_csv(file_name, header=None, names=[file_name], sep='\t', usecols=[4])
        column_list.append(df)

# 将所有提取的列横向拼接
result_frame = pd.concat(column_list, axis=1)
# 保存结果为制表符分隔文件,不生成自动索引列
result_frame.to_csv('rammi.allra', sep='\t', encoding='utf-8', index=False)

内容的提问来源于stack exchange,提问作者AWE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:45:40