将for循环的输出写入python中的csv

che*_*ate 5 python csv string for-loop export-to-csv

我正在打开一个名为的 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})
Run Code Online (Sandbox Code Playgroud)

样本输入:

    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
Run Code Online (Sandbox Code Playgroud)

Car*_*cco 2

我希望这对您来说是正确的方法,如果不正确,请告诉我,我们会检查。

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]})
Run Code Online (Sandbox Code Playgroud)
  1. 打开Remarks_Drug.csv文件并创建两个列表,其中存储根据您的喜好详细说明的行值。
  2. 迭代产品列表并枚举它,以便您有一个可在文件名列表上使用的索引。
  3. 打开输出文件并将结果附加到其中。

您还可以使用pandas更快、更智能的方式详细阐述 csv 文件。

这是熊猫的解决方案:

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)
Run Code Online (Sandbox Code Playgroud)