【问题标题】:how to combine multiple csv files into a csv file using tcl如何使用 tcl 将多个 csv 文件组合成一个 csv 文件
【发布时间】:2018-07-04 13:42:44
【问题描述】:

我尝试使用 TCL 将所有相似的 csv 文件组合在一起

exec /bin/cat checked_*.csv > check_all.csv

但结果显示:

/bin/cat: checked_*.csv: 没有这样的文件或目录

执行时

"exec /bin/cat check_*.csv > check_all.csv" (文件“test.tcl”第 80 行)

【问题讨论】:

    标签: csv tcl


    【解决方案1】:

    exec 命令不像 shell 那样扩展文件名,所以cat 只接收字符串checked_*.csv。我的猜测是

    exec /bin/cat {*}[glob checked_*.csv] > check_all.csv
    

    会更好(不过我在 Windows 上)。由于扩展,需要 Tcl 8.5 或更高版本。

    我会推荐

    package require fileutil
    
    ::fileutil::writeFile check_all.csv [::fileutil::cat {*}[glob -nocomplain checked_*.csv]]
    

    顺便说一句。

    【讨论】:

    • 如果你在shell中运行/bin/cat checked_*.csv > check_all.csv会得到什么?
    • /bin/cat: checked_*.csv: 没有这样的文件或目录
    • 我认为是我以前的代码影响了它。在合并这些文件之前,我在同一个脚本中创建了它们,这会是问题吗?
    • 不,在同一个脚本中创建文件并不意味着它们不能连接到另一个文件中。但是,如果您正在这样做,为什么不首先将所有数据放入check_all.csv
    • 因为我想要分离文件和合并文件
    【解决方案2】:

    嗯,也许是纯 Tcl 解决方案?

    set files [glob checked_*.csv]
    set fout [open "check_all.csv" w]
    
    foreach file $files {
        set fin [open $file r]
        fcopy $fin $fout
        close $fin
    }
    
    close $fout
    

    编辑:感谢 glenn jackman,将 puts $fout [read $fin] 替换为 fcopy $fin $fout

    【讨论】:

    • 我的脚本的奇怪之处在于,如果我在另一个脚本中运行而我能够合并所有文件,而该脚本没有我创建检查文件的先前脚本并对其执行某事。会影响吗?作为您提供的代码的结果,我只能将其中一个文件写入 check_all.csv
    • @EwOng 如果文件尚未写入,那么是的,并非所有文件都写入 check_all 文件是有意义的。
    • 你可能想fcopy $fin $fout而不是puts $fout [read $fin]——我相信fcopy会更有效率。
    • 谢谢@glennjackman!在你提到它之前没有遇到过这个命令
    【解决方案3】:

    你需要 exec 和你的 *.csv 的完整路径,比如

    exec /bin/cat /home/s/pathtofile/checked_*.csv > check_all.csv
    

    【讨论】:

    • 我仍然无法合并它。我认为是因为在脚本中,我只是创建了文件并导致它无法创建。有什么解决办法吗?
    • 那行不通。 exec 不会为您扩展 glob。
    【解决方案4】:

    快速而肮脏的解决方案:启动一个外壳来为您处理通配和重定向:

    exec /bin/sh -c {/bin/cat checked_*.csv > check_all.csv}
    

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 2014-05-17
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 2020-09-01
      相关资源
      最近更新 更多