比较两个 csv 文件中的特定字符串并根据这些字符串制作第三个 csv
Comparing a specific string in two csv files and making third csv based on those strings
我有这个 csv 文件:
OU Mailfile
CORP:Jenny Smith: mail/246802.nsf
"CORP:John Smith:,John Smith:" mail/123456.nsf
STORE:Mary Poppins: mail/789012.nsf
STORE:Tony Stark: mail/345678.nsf
STORE:Carmen Sandiego: mail/901234.nsf
NEWS:Peter Parker: mail/567890.nsf
NEWS:Clark Kent: mail/654321.nsf
STORES:store123 mail/369121.nsf
NEWS:CORPmanager mail/137112.nsf
NEWS:STOREmanager mail/083561.nsf
然后file2.csv:
OU
CORP
STORE
NEWS
对于 file2.csv 中包含 'CORP'、'STORE' 或 'NEWS' 的每一行,我想搜索 file1.csv 并创建一个文件,例如 STOREall.csv、CORPall.csv 和 NEWSall.csv.
比如NEWSall.csv
OU Mailfile
NEWS:Peter Parker: mail/567890.nsf
NEWS:Clark Kent: mail/654321.nsf
NEWS:CORPmanager mail/137112.nsf
NEWS:STOREmanager mail/083561.nsf
但我得到的是这个输出:
在CORPall.csv
OU Mailfile
CORP:Jenny Smith: mail/246802.nsf
CORP:John Smith:,John Smith: mail/123456.nsf
NEWS:CORPmanager mail/137112.nsf
然后NEWSall.csv
OU Mailfile
NEWS:Peter Parker: mail/567890.nsf
NEWS:Clark Kent: mail/654321.nsf
由于 CORP 也在新闻中,因此出现在 CORPall.csv 中。我不想要那个。如果它在 :
之前说 NEWS
那么它应该在 NEWSall.csv 中,等等
我使用了这里有人给我看的这个片段:
for dept in OUList['OU']:
df[df['OU'].str.contains(dept)]
df_dept['OU'].to_csv(f'{dept}all.csv', index=False)
效果很好。但它只查找整个文件中的内容。所以我需要一种在 :
之前搜索的方法(注意在某些情况下有两个)
听起来“OU”列应该在 :
字符上分成两列。您可以使用 df['OU'].str.split(':')
执行此操作。将输出保存到新列,然后您可以在 :
左侧创建的列上使用相同的过滤技术
您可以使用 str.startswith
通过检查每个字符串元素的开头是否与 OUList
中的模式相匹配来过滤数据帧。
for dept in OUList['OU']:
df_dept = df[df['OU'].str.startswith(f'{dept}:')]
df_dept.to_csv(f'{dept}all.csv', index=False)
我有这个 csv 文件:
OU Mailfile
CORP:Jenny Smith: mail/246802.nsf
"CORP:John Smith:,John Smith:" mail/123456.nsf
STORE:Mary Poppins: mail/789012.nsf
STORE:Tony Stark: mail/345678.nsf
STORE:Carmen Sandiego: mail/901234.nsf
NEWS:Peter Parker: mail/567890.nsf
NEWS:Clark Kent: mail/654321.nsf
STORES:store123 mail/369121.nsf
NEWS:CORPmanager mail/137112.nsf
NEWS:STOREmanager mail/083561.nsf
然后file2.csv:
OU
CORP
STORE
NEWS
对于 file2.csv 中包含 'CORP'、'STORE' 或 'NEWS' 的每一行,我想搜索 file1.csv 并创建一个文件,例如 STOREall.csv、CORPall.csv 和 NEWSall.csv.
比如NEWSall.csv
OU Mailfile
NEWS:Peter Parker: mail/567890.nsf
NEWS:Clark Kent: mail/654321.nsf
NEWS:CORPmanager mail/137112.nsf
NEWS:STOREmanager mail/083561.nsf
但我得到的是这个输出:
在CORPall.csv
OU Mailfile
CORP:Jenny Smith: mail/246802.nsf
CORP:John Smith:,John Smith: mail/123456.nsf
NEWS:CORPmanager mail/137112.nsf
然后NEWSall.csv
OU Mailfile
NEWS:Peter Parker: mail/567890.nsf
NEWS:Clark Kent: mail/654321.nsf
由于 CORP 也在新闻中,因此出现在 CORPall.csv 中。我不想要那个。如果它在 :
之前说 NEWS
那么它应该在 NEWSall.csv 中,等等
我使用了这里有人给我看的这个片段:
for dept in OUList['OU']:
df[df['OU'].str.contains(dept)]
df_dept['OU'].to_csv(f'{dept}all.csv', index=False)
效果很好。但它只查找整个文件中的内容。所以我需要一种在 :
之前搜索的方法(注意在某些情况下有两个)
听起来“OU”列应该在 :
字符上分成两列。您可以使用 df['OU'].str.split(':')
执行此操作。将输出保存到新列,然后您可以在 :
您可以使用 str.startswith
通过检查每个字符串元素的开头是否与 OUList
中的模式相匹配来过滤数据帧。
for dept in OUList['OU']:
df_dept = df[df['OU'].str.startswith(f'{dept}:')]
df_dept.to_csv(f'{dept}all.csv', index=False)