【问题标题】:How to add new column to row containing certain value?如何将新列添加到包含特定值的行?
【发布时间】:2018-06-15 22:33:44
【问题描述】:

我是 Python 编码的新手。 我需要在包含特定单词的行中添加新列。 我的 csv 文件如下:

one  two three four five 
two  one five three four 
five two four three five

我需要在第二列中包含“two”的所有行中添加“2”。

像这样:

one  two three four five 2
two  one five three four
five two four three five 2

提前致谢

【问题讨论】:

  • 这不是 CSV 文件。你试过什么?请先显示您的代码,并说明您的具体问题。那么我们也许可以提供帮助。
  • 如果添加到列中,则不能将列添加到某些行,它将成为每一行的一部分。

标签: python csv parsing


【解决方案1】:

你可以这样做

import csv

with open('input.csv','r') as csvinput:
    with open('output.csv', 'w') as csvoutput:
        writer = csv.writer(csvoutput, lineterminator='\n')
        reader = csv.reader(csvinput)

        all = []

        for row in reader:
            if(row[1] == "two"):
                row.append(2)
            all.append(row)

        writer.writerows(all)

【讨论】:

  • 你为什么要等着把所有的行收集到一个列表中而不是一次写一行? :-(
【解决方案2】:

这是一个非常简单的解析,所以我不会打扰 csv 模块。只需打开文件并遍历每一行。在每一行上做一个split,它将这些行拆分为一个使用空格作为分隔符的列表(默认)。接下来的几行应该很明显:那些将“two”作为第二列(拆分列表中的第二项)的那些被补充,那些没有。

读取文件并修改行后,将其写入新文件。

newlines = []
with open("thecsv.txt") as f:
    for l in f:
        if l.split()[1] == "two":
            newlines.append(l.strip() + " 2\n")
        else:
            newlines.append(l)
with open("newcsv.txt", 'w') as f:
    for l in newlines:
        f.write(l)

【讨论】:

  • 或 'f.write("".join(newlines))' 而不是最后两行。或者只是附加到一个字符串而不是一个列表。
  • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案3】:

您可以同时打开正在读取的文件和要写入的文件:

with open('my_text.txt') as read_file, open("output.txt", "w+") as write_file:
    for line in read_file:

读取每一行并删除其后的空格

        line.strip()

如果每行之间有空格,则拆分它们:

        my_list = line.split()
        if my_list[1] == "two":
            my_list.append("2")

将“2”添加到列表中,然后在列表中添加join,每个项目之间有一个空格。在行尾添加新行。

        write_file.write(" ".join(my_list) + "\n")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多