【问题标题】:Split CSV values on single row into individual rows将单行上的 CSV 值拆分为单独的行
【发布时间】:2020-07-07 08:46:27
【问题描述】:

我有一个 Python 脚本,它输出一个文本文件,其中包含以逗号分隔的列表中的数千个随机文件名,所有文件都在一行中。

randomFileName1, randomFileName2, randomFileName3, etc.

我想获取列表中的每个值,并将其放入新 CSV 文件中自己的行中。

randomFileName1
randomFileName2
randomFileName3

我尝试了awk 的一些变体,但没有成功。将这些值移动到它们自己的行中的最佳方法是什么?

【问题讨论】:

  • python本身就没有拆分字符串的能力吗?
  • '\n'.join(row.replace(',', ' ').split()) + '\n'

标签: python bash csv text awk


【解决方案1】:

使用 GNU sed:

sed 's|, |\n|g' file

或者,对于便携式替代方案,

sed 's|, |\
|g' file

【讨论】:

    【解决方案2】:

    (g)awk:

    echo randomFileName1, randomFileName2, randomFileName3 | \
       awk  '{ split($0,a,/,[ ]*/); for (i in a) { print a[i] }}'
    

    蟒蛇:

    import re
    a="randomFileName1, randomFileName2, randomFileName3"
    b=re.split(r',[ ]*',a)
    for i in b:
       print(i)
    

    (灵感来自:String splitting in Python using regex

    【讨论】:

    • awk 不是特定于 gawk 的,它适用于任何 awk。不过,您不需要将空格放在括号表达式中,它已经是文字 - /, */
    • @Ed Morton,在 macOS 上默认安装的 awk 上,打印顺序不正确,因此他的声明“(g)awk”是合适的。
    • @user3439894 不,任何 awk 中的顺序都是“随机”的,因为使用了 for (i in a),它将以哈希顺序访问数组元素,而不是您可能想到的任何特定顺序。如果在给定特定输入集的情况下,您从 gawk 获得了您想要的顺序,那么这只是巧合,它可能是任何顺序,并且对于不同的数据集将是不同的顺序。
    • @Ed Morton,如果输出顺序是从输入顺序中随机化的,那么 Luuk 的 awk 答案不是一个好的解决方案。在我的 Linux 系统上,输出顺序与 gawk 4.1.x 的输入顺序 (1 2 3) 匹配,但在 macOS 下,不是 gawk 和旧版本的 awk 输出顺序是 2 3 1,每个都一致。
    • @Ed Morton,感谢您提供信息和链接。我现在知道为什么我一直使用例如for (i=1; i in a; i++) ,因为我通常总是想要有序的输出。 :)
    【解决方案3】:

    我实际上能够使用 Python 中的 import csv 模块解决这个问题。我确信这可以稍微清理一下,但它可以满足我的需要。

    import csv
    
    with open('parse.txt', 'r') as csv_file:
        csv_reader = csv.reader(csv_file)
    
        with open('parse_write.csv', 'w', newline='') as new_file:
            csv_writer = csv.writer(new_file, delimiter='\t')
    
            for line in csv_reader:
                for file_name in line:
                    csv_writer.writerow(file_name)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 2019-07-11
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多