Py学习  »  Python

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

checkmate • 7 年前 • 2390 次点击  

我正在打开一个名为 Remarks_Drug.csv 其中包含 产品名称 和地图 文件名 在连续的列中。我在产品栏做一些操作 删除之后的所有字符串内容 + 性格。把绳子从 + 字符,我将结果存储在一个名为 product_patterns .

现在我要开一个新的 csv 我想把for循环的输出写到 两列,第一列包含 产品模式 第二个包含 相应的 filenames .

我现在得到的输出只是 output csv 我在找的。 我想我没有正确地循环,所以每一行 产品模式 文件名得到 附加在 输出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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49399
文章 [ 2 ]  |  最新文章 7 年前
RussellB
Reply   •   1 楼
RussellB    7 年前
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将非常方便和高效。这只是上述问题的另一种解决方案。

Carlo Zanocco
Reply   •   2 楼
Carlo Zanocco    7 年前

我希望这是你的正确方法,如果不是,告诉我,我们检查。

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. 打开 备注.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)