迭代字符串的元组和列表列表,并将值导出到Python中的csv

2024-06-11 19:44:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为“tableextract”的函数,它返回一个列表列表。你知道吗

调用的1个文件的“tableextract”函数输出示例ABC.txt文件地址:

[[' ', 'CITRIC ACID, ANHYDROUS', '5 mg', ''], [' ', 'NITROGEN', '5 mg', '21%'], [' ', 'PURIFIED WATER', '5 mg', '']]

现在,我有了一个文件目录,我想在其中运行这个函数并将所有值导出到一个csv中。对于目录中的每个文件,根据“tableextract”函数为该文件生成的列表的数量,我希望在csv中有一个新行,其中的文件名和列表列表中的每个列表项作为一个单独的列。你知道吗

预期输出(0,1,2,3列值由pandas生成,在逗号上拆分时。。sep=',')

Filename       0               1                         2             3

ABC.txt                 CITRIC ACID, ANHYDROUS         5mg                   

ABC.txt                   NITROGEN                     5 mg          21%

ABC.txt                   PURIFIED WATER               5 mg 

现在,我写的代码是:

data = []
    dir ='C:\\Users\\'
    allfiles = os.listdir(dir)
    files =[fnmatch for fnmatch in allfiles if fnmatch.endswith(".txt")]
    for x in files:
        output = tableextract(dir+x)
        newout = x,output
        data.append((newout))
        df = pd.DataFrame(data)

        df.to_csv('./Desktop/newgoofs7.csv', index=False, sep=',')

正在csv中以这种格式提供输出:

    0903882.txt     [[' ', 'HYPROMELLOSE', '1.765 mg', '1.765 %'], [' ', 'PE', '10.000 mg', '10.000 %'], [' ', 'RAMIPRIL', '10 mg', ''], [' ', 'RAMIPRIL', '10.000 mg', '10.000 %'], [' ', 'SODIUM STEARYL FUMARATE', '0.250 mg', '0.250 %']]

    0903777.txt     [[' ', 'HYPROMELLOSE', '0.441 mg', '0.441 %'], [' ', 'PE', '2.500 mg', '2.500 %'], [' ', 'RAMIPRIL', '2.5 mg', ''], [' ', 'RAMIPRIL', '2.500 mg', '2.500 %'], [' ', 'YELLOW FERRIC OXIDE', '0.100 mg', '0.100 %']]

其中一列有文件名,而“tablextract”函数的整个输出都在一列中。你知道吗

我希望代码的输出提供“Expected output:”格式中提到的输出。你知道吗

有什么帮助吗?你知道吗


Tags: 文件csv函数txt列表outputdatadir
1条回答
网友
1楼 · 发布于 2024-06-11 19:44:08

必须输入“df=pd.数据帧(数据)“和”数据框到\u csv(…)”在“for”循环之后。以下是我的解决方案:

# testdata
data=[
    ("ABC.txt", [[' ', 'CITRIC ACID, ANHYDROUS', '5 mg', ''], [' ', 'NITROGEN', '5 mg', '21%'], [' ', 'PURIFIED WATER', '5 mg', '']]),
    ("DEF.txt", [[' ', 'citric acid, anhydrous', '4 mg', ''], [' ', 'nitrogen', '8 mg', '1%'], [' ', 'purified water', '9 mg', '']])
  ]

#           -
df= pd.DataFrame(data)
df2= df.explode(1)[1].str.join("|").str.split("|",expand=True)
cols= df2.columns.tolist()
df2["Filename"]= df[0]
df2= df2.reindex(["Filename"]+cols, axis=1)

df2:

  Filename  0                       1     2    3
0  ABC.txt     CITRIC ACID, ANHYDROUS  5 mg     
0  ABC.txt                   NITROGEN  5 mg  21%
0  ABC.txt             PURIFIED WATER  5 mg     
1  DEF.txt     citric acid, anhydrous  4 mg     
1  DEF.txt                   nitrogen  8 mg   1%
1  DEF.txt             purified water  9 mg  

编辑: 另一种解决方案:

for x in files:
    data.append( tableextract(dir+x) )

dd={"Filename": [ fn for fn,dat in data for i in range(len(dat)) ] }
z= zip(*[d for fn,dat in data for d in dat])
dd.update({i:a for i,a in enumerate(z)})
df2=pd.DataFrame(dd)

相关问题 更多 >