【问题标题】:how to compare two csv files and write 1 or 0 in a new file with python如何比较两个csv文件并用python在新文件中写入1或0
【发布时间】:2017-12-21 03:13:03
【问题描述】:

我对 python 很陌生,我想问一些问题。 我想比较 2 个 csv 文件。具有逗号分隔形式的所有属性值的源文件。 源csv文件包含这样的

advapi32.dll,comctl32.dll,comdlg32.dll,gdi32.dll,gdiplus.dll,hal.dll,imagehlp.dll,kernel32.dll,mpr.dll,mscoree.dll,msi.dll,msvcrt.dll ,mswsock.dll,ndis.sys,netapi32.dll,ntdll.dll,ntoskrnl.exe,ole32.dll,oleaut32.dll,oledlg.dll,opengl32.dll,psapi.dll,rpcrt4.dll,setupapi.dll,shell32 .dll,shlwapi.dll,tapi32.dll,ucc12.dll,user32,user32.dll,wininet.dll,winmm.dll,winspool.drv,ws2_32.dll

第二个csv文件是

advapi32.dll,gdi32.dll,imagehlp.dll,kernel32.dll,msvcrt.dll,mswsock.dll,ntdll.dll,ole32.dll,oleaut32.dll

如果第二个文件的值包含在源中,我想写 1,否则写 0 到新文件。 输出 csv 文件示例为:

advapi32.dll,comctl32.dll,comdlg32.dll,gdi32.dll,gdiplus.dll,hal.dll,imagehlp.dll,kernel32.dll,mpr.dll,mscoree.dll,msi.dll,msvcrt.dll ,mswsock.dll,ndis.sys,netapi32.dll,ntdll.dll,ntoskrnl.exe,ole32.dll,oleaut32.dll,oledlg.dll,opengl32.dll,psapi.dll,rpcrt4.dll,setupapi.dll,shell32 .dll,shlwapi.dll,tapi32.dll,ucc12.dll,user32,user32.dll,wininet.dll,winmm.dll,winspool.drv,ws2_32.dll

1,0,0,1,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0 ,1,1,0,0,0,1,1,0,0,1

谁能帮帮我,因为我是 python 编程的新手。

【问题讨论】:

  • 请学习如何在堆栈溢出中提问
  • Python 问题,但我没有看到 Python 代码。做一些工作,并在您真正陷入困境时询问我们。顺便说一句,“如果第二个文件的值包含在源代码中”是什么意思?
  • @RaphaMex 例如,输出1,因为第二个字符串中的advapi32.dll 存在于第一个字符串中。
  • 了解 split(",")、一些 for 循环和 in 关键字将使您走得更远@Cho

标签: python


【解决方案1】:

如果我对您的理解正确,那么您较短的 dll 列表是某种“库存”(也称为可能),您想查看较长的列表以查看它是否在较短的列表中。如果这是正确的,那么这样的事情就可以做到(使用 splitin 作为 cmets 建议):

possible = "advapi32.dll,gdi32.dll,imagehlp.dll,kernel32.dll,msvcrt.dll,mswsock.dll,ntdll.dll,ole32.dll,oleaut32.dll"
test = "advapi32.dll,comctl32.dll,comdlg32.dll,gdi32.dll,gdiplus.dll,hal.dll,imagehlp.dll,kernel32.dll,mpr.dll,mscoree.dll,msi.dll,msvcrt.dll,mswsock.dll,ndis.sys,netapi32.dll,ntdll.dll,ntoskrnl.exe,ole32.dll,oleaut32.dll,oledlg.dll,opengl32.dll,psapi.dll,rpcrt4.dll,setupapi.dll,shell32.dll,shlwapi.dll,tapi32.dll,ucc12.dll,user32,user32.dll,wininet.dll,winmm.dll,winspool.drv,ws2_32.dll"

possible_list = possible.split(",")
does_match = []
for t in test.split(","):
    if t in possible_list:
        does_match.append("1")
    else:
        does_match.append("0")
print(",".join(does_match))

这只是你如何处理它的基本想法。我留给您的练习是从文件中读取数据并将其写回,但是为此您可以在 stackoverflow 上找到很多答案。

【讨论】:

  • 太好了,非常感谢。这正是我一直在寻找的。我完成了你的作业作为我的作业。非常感谢 Hansapla。
  • @ChoCho:是的,看起来很正确,很高兴我能提供帮助
  • 感谢您的帮助 :)
猜你喜欢
  • 2014-06-08
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2015-01-07
相关资源
最近更新 更多