Записать вывод из цикла for в CSV в Python - PullRequest
0 голосов
/ 27 февраля 2019

Я открываю csv с именем Remarks_Drug.csv, который содержит названия продуктов и сопоставленные имена файлов в последовательных столбцах.Я выполняю некоторые операции со столбцом продукта, чтобы удалить все содержимое строки после символа +.После удаления строки из + символов я сохраняю результат в переменной с именем product_patterns.

Теперь я открываю новый csv и хочу записать вывод из цикла for вдва столбца, первый из которых содержит product_patterns, а второй содержит соответствующий filenames.

Теперь я получаю только последнюю строку из output csv, которую я ищу,Я думаю, что я не зацикливаюсь должным образом, так что каждая строка product_patterns и имя файла добавляются в файл output csv.

Может кто-то, пожалуйста, помогите мне с этим.

Прикрепленный код ниже:

import csv


with open('Remarks_Drug.csv', newline='', encoding ='utf-8') as myFile:
    reader = csv.reader(myFile)
    for row in reader:
        product = row[0].lower()
        #print('K---'+ product)
        filename = row[1]
        product_patterns = ', '.join([i.split("+")[0].strip() for i in product.split(",")])


        #print(product_patterns, filename)

    with open ('drug_output100.csv', 'a') as csvfile:
        fieldnames = ['product_patterns', 'filename']
        print(fieldnames)
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        print(writer)
        #writer.writeheader()
        writer.writerow({'product_patterns':product_patterns, 'filename':filename})

Пример ввода:

    Film-coated tablet + TERIFLUNOMIDE, 2011-07-18 - Received approval letter_EN.txt
    Film-coated tablet + VANDETANIB,             2013-12-14 RECD Eudralink_Caprelsa II-28 - RSI - 14.12.2017.txt
    Solution for injection + MenQuadTT, 395_EU001930-PIP01-16_2016-02-22.txt
    Solution for injection + INSULIN GLARGINE,  2017-11-4 Updated PR.txt
    Solution for injection + INSULIN GLARGINE + LIXISENATIDE,   2017 12 12 Email Approval Texts - SA1006-.txt

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019
import csv
import pandas as pd

with open('Remarks_Drug.csv', newline='', encoding ='utf-8') as myFile:
    reader = csv.reader(myFile)
    mydrug = []
    for row in reader:
        product = row[0].lower()
        #print('K---'+ product)
        filename = row[1]
        product_patterns = ', '.join([i.split("+")[0].strip() for i in product.split(",")])
        mydrug.append([product_patterns, filename])

#     print(mydrug)

    df = pd.DataFrame(mydrug, columns=['product_patterns', 'filename'])
    print(df)
    df.to_csv('drug_output100.csv', sep=',', index=False)

Используется библиотека pandas.Если вы имеете дело с большими csv файлами, использование panda s будет удобно и эффективно с точки зрения производительности и памяти.Это просто альтернативное решение для вышеперечисленного.

0 голосов
/ 27 февраля 2019

Я надеюсь, что это правильный путь для вас, если нет, скажите мне, и мы проверим.

import csv

with open('Remarks_Drug.csv') as myFile:
    reader = csv.reader(myFile)
    products_list = list()
    filenames_list = list()

    for row in reader:
        products_list.append(row[0].lower().split("+")[0].strip())
        filenames_list.append(row[1])

    for index, product in enumerate(products_list):
        with open ('drug_output100.csv', 'a') as csvfile:
            fieldnames = ['product_patterns', 'filename']
            print(fieldnames)
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
            print(writer)
            writer.writerow({'product_patterns':product, 'filename':filenames_list[index]})
  1. Откройте файл Remarks_Drug.csv и создайте двасписок, в котором хранится значение строки, разработанное по вашему усмотрению.
  2. Выполните итерацию в списке продуктов и перечислите его, чтобы у вас был индекс для использования в списке имен файлов.
  3. Откройте выходной файл и добавьте кЭто результат.

Вы также можете использовать pandas для более быстрой и разумной разработки файлов CSV.

Здесь решение pandas :

import pandas as pd

def select_real_product(string_to_elaborate):
    return string_to_elaborate.split('+')[0].strip()

df = pd.read_csv("Remarks_Drug.csv", delimiter=',', names=("product", "filename"))

df['product'] = df['product'].apply(select_real_product)

df.to_csv("drug_output100.csv", sep=',', na_rep='empty',index_label=False, index=False)
...