Как добавить новый столбец в строку, содержащую определенное значение?

1

Я новичок в кодировании Python. Мне нужно добавить новый столбец в строку, содержащую определенное слово. У меня есть файл csv:

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

Мне нужно добавить "2" ко всем строкам, содержащим "два" во втором столбце.

Как это:

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

заранее спасибо

Теги:
csv
parsing

3 ответа

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)
  • 0
    Почему вы ждете, чтобы собрать все строки в списке, а не писать по очереди? :-(
  • 0
    Спасибо, это работает!
1

Это довольно простой анализ, поэтому я бы не стал беспокоиться о модуле csv. Просто откройте файл и выполните итерацию по каждой строке. Сделайте split на каждой строке, которая разбивает строки на список, используя пробел в качестве разделителя (по умолчанию). Следующие две строки должны быть очевидными: те, у которых есть "два" в качестве второго столбца (второй элемент в списке разделов), дополняются, а те, которые этого не делают, - нет.

После того как вы прочитали файл и изменили строки, напишите его в новый файл.

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)
  • 0
    Или 'f.write ("". Join (newlines))' вместо двух последних строк. Или, в качестве альтернативы, просто добавьте строку вместо списка.
  • 1
    Хотя этот фрагмент кода может быть решением, включение пояснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код.
Показать ещё 1 комментарий
0

Вы можете открыть файл, который вы читаете, и файл, который хотите записать, сразу:

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")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню