【问题标题】:Add Multiple Data Entries from CSV to 1 String in Python在 Python 中将多个数据条目从 CSV 添加到 1 个字符串
【发布时间】:2020-06-04 22:03:47
【问题描述】:

我在 .csv 文件中有以下数据:

1,-100,phrase1
2,-100,phrase2
3,1,phrase3
4,-100,phrase4
5,1,phrase5

当找到 -100 时,我想将所有“短语*”添加到一个字符串中,并用逗号分隔直到最后一个条目。到目前为止,我有以下内容:

import csv

output = []

with open('test_file.csv') as test_file:
    csv_reader_object = csv.reader(test_file)
    for expression_id, expression_weight, expression_phrase in csv_reader_object:
        expression_weight = int(expression_weight)

        if expression_weight == -100:
            output.append(expression_phrase)
            print(output)

我在想我可以遍历列表,找到 -100,将 expression_phrase 添加到列表中,然后遍历列表并将所有表达式短语添加到一个大字符串中。我正在寻找以下输出:

字符串 = (phrase1,phrase2,phrase4)

感谢任何帮助/提示。我一直在想办法解决这个问题。

【问题讨论】:

    标签: python loops csv for-loop


    【解决方案1】:

    您可以在 python 中通过过滤行并用逗号连接结果来紧凑地执行此操作。在这种情况下,将"-100" 比较为字符串似乎没问题,尽管在更复杂的情况下可能需要进行转换

    import csv
    
    with open('test_file.csv') as test_file:
        final = ",".join(row[2] for row in csv.reader(test_file) if row[1] == "-100")
    print(final)
    

    如果您想收集多个字符串,可以将其转换为 for 循环。

    import csv
    
    with open('test_file.csv') as test_file:
        phrases_1 = []
        phrases_2 = []
        for row in csv.reader(test_file):
            if row[1] == "-100":
                phrases_1.append(row[2])
            if row[0] == "1":
                phrases_2.append(row[2])
        return ",".join(phrases_1), ",".join(phrases_2)
    

    您也可以再次执行第一个选项。您将花费更多时间来解析 csv,但我认为不会有很大的不同。

    【讨论】:

    • 如果我想在 expression_weight = 1 处创建另一个短语字符串,复制最终变量并只查找 row[1] == 1 是否有意义?
    • 除了将其分解为 for 循环是有意义的,这样您就不会两次解析文件。我会更新的。
    • 非常感谢您。我缺少的关键是字符串 join() 方法 - 将来需要注意这一点。你让我头疼不已。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2015-01-19
    相关资源
    最近更新 更多