python初学者-如何将多个文件的内容读入唯一列表?
我想把几个文件中的内容读入我以后可以调用的唯一列表中——最终,我想将这些列表转换为集合,并对它们执行交集和减法。这一定是一个非常天真的问题,但是在仔细阅读了Lutz的“学习Python”中的迭代器和循环部分之后,我似乎无法理解如何处理这个问题。以下是我写的:python初学者-如何将多个文件的内容读入唯一列表?,python,for-loop,readlines,Python,For Loop,Readlines,我想把几个文件中的内容读入我以后可以调用的唯一列表中——最终,我想将这些列表转换为集合,并对它们执行交集和减法。这一定是一个非常天真的问题,但是在仔细阅读了Lutz的“学习Python”中的迭代器和循环部分之后,我似乎无法理解如何处理这个问题。以下是我写的: #!/usr/bin/env python import sys OutFileName = 'test.txt' OutFile = open(OutFileName, 'w') FileList = sys.argv[1: ] L
#!/usr/bin/env python
import sys
OutFileName = 'test.txt'
OutFile = open(OutFileName, 'w')
FileList = sys.argv[1: ]
Len = len(FileList)
print Len
for i in range(Len):
sys.stderr.write("Processing file %s\n" % (i))
FileNum = i
for InFileName in FileList:
InFile = open(InFileName, 'r')
PathwayList = InFile.readlines()
print PathwayList
InFile.close()
通过几个简单的测试文件,我得到如下输出:
正在处理文件0
处理文件1
['alg1\n','alg2\n','alg3\n','alg4\n','alg5\n','alg6']
['csr1\n','csr2\n','csr3\n','csr4\n','csr5\n','csr6\n','csr7\n','alg2\n','alg6']
这些列表是正确的,但是如何将每个列表分配给一个唯一的变量,以便稍后调用它们(例如,通过在变量名称中包含索引#from range)
非常感谢您为一个完整的编程初学者指出了正确的方向 您需要为正在读取的每个文件“编号”动态创建变量名。(我故意含糊其辞,知道如何构建这样的变量是非常有价值的,如果你自己发现的话,会更容易记住)
类似的内容将为您提供一个开始您需要为正在读取的每个文件“编号”动态创建变量名。(我故意含糊其辞,知道如何构建这样的变量是非常有价值的,如果你自己发现的话,会更容易记住)
#!/usr/bin/env python
import sys
FileList = sys.argv[1: ]
PathwayList = []
for InFileName in FileList:
sys.stderr.write("Processing file %s\n" % (i))
InFile = open(InFileName, 'r')
PathwayList.append(InFile.readlines())
InFile.close()
像这样的东西会给你一个开始
#!/usr/bin/env python
import sys
FileList = sys.argv[1: ]
PathwayList = []
for InFileName in FileList:
sys.stderr.write("Processing file %s\n" % (i))
InFile = open(InFileName, 'r')
PathwayList.append(InFile.readlines())
InFile.close()
假设您读入两个文件,下面将进行逐行比较(它不会在较长的文件中拾取任何额外的行,但是如果其中一个文件的行数大于另一个文件的行数,那么它们就不一样了;)
对于您想要做的事情,您可能想看看Python中的模块。对于排序,请查看,someListVar.sort()
将对someListVar的内容进行适当排序
假设您读入两个文件,下面将进行逐行比较(它不会在较长的文件中拾取任何额外的行,但是如果其中一个文件的行数大于另一个文件的行数,那么它们就不一样了;)
对于您想要做的事情,您可能想看看Python中的模块。对于排序,请查看,
someListVar.sort()
将对someListVar的内容进行适当排序。您需要一个包含PathwayList列表的列表,即列表列表列表
注意:使用大写的变量名是很少见的。这方面没有严格的规定,但按照惯例,大多数人只对类使用大写的名称。您需要一个包含PathwayList列表的列表,即列表列表
注意:使用大写的变量名是很少见的。这方面没有严格的规定,但按照惯例,大多数人只对类使用大写名称。如果不需要记住内容的来源,您可以这样做:
PathwayList = []
for InFileName in FileList:
sys.stderr.write("Processing file %s\n" % InFileName)
InFile = open(InFileName, 'r')
PathwayList.append(InFile.readlines())
InFile.close()
for contents in PathwayList:
# do something with contents which is a list of strings
print contents
或者,如果要跟踪文件名,可以使用字典:
PathwayList = {}
for InFileName in FileList:
sys.stderr.write("Processing file %s\n" % InFileName)
InFile = open(InFileName, 'r')
PathwayList[InFile] = InFile.readlines()
InFile.close()
for filename, contents in PathwayList.items():
# do something with contents which is a list of strings
print filename, contents
如果您不需要记住内容的来源,您可以这样做:
PathwayList = []
for InFileName in FileList:
sys.stderr.write("Processing file %s\n" % InFileName)
InFile = open(InFileName, 'r')
PathwayList.append(InFile.readlines())
InFile.close()
for contents in PathwayList:
# do something with contents which is a list of strings
print contents
或者,如果要跟踪文件名,可以使用字典:
PathwayList = {}
for InFileName in FileList:
sys.stderr.write("Processing file %s\n" % InFileName)
InFile = open(InFileName, 'r')
PathwayList[InFile] = InFile.readlines()
InFile.close()
for filename, contents in PathwayList.items():
# do something with contents which is a list of strings
print filename, contents
您可能想签出Python模块,它是标准库的一部分,允许您一次处理多个文件。您可能想签出Python模块,它是标准库的一部分,允许您一次处理多个文件。基本上,您有一个文件列表,并且希望更改为这些文件的行列表 有几种方法:
result = [ list(open(n)) for n in sys.argv[1:] ]
这将得到一个类似->['alg1'、'alg2'、'alg3']、['csr1'、'csr2'…]的结果。访问类似于'result[0]',这将导致['alg1'、'alg2'、'alg3']
更好的可能是字典:
result = dict( (n, list(open(n))) for n in sys.argv[1:] )
如果只想连接,只需将其链接:
import itertools
result = list(itertools.chain.from_iterable(open(n) for n in sys.argv[1:]))
# -> ['alg1', 'alg2', 'alg3', 'csr1', 'csr2'...
对于初学者来说,没有一行代码……但是现在,尝试理解正在发生的事情将是一个很好的练习:)基本上,您有一个文件列表,您希望更改为这些文件的行列表 有几种方法:
result = [ list(open(n)) for n in sys.argv[1:] ]
这将得到一个类似->['alg1'、'alg2'、'alg3']、['csr1'、'csr2'…]的结果。访问类似于'result[0]',这将导致['alg1'、'alg2'、'alg3']
更好的可能是字典:
result = dict( (n, list(open(n))) for n in sys.argv[1:] )
如果只想连接,只需将其链接:
import itertools
result = list(itertools.chain.from_iterable(open(n) for n in sys.argv[1:]))
# -> ['alg1', 'alg2', 'alg3', 'csr1', 'csr2'...
对于初学者来说,没有一行代码……但是现在,尝试理解正在发生的事情将是一个很好的练习:)我一直在思考如何将每个文件中的PathwayList保存为唯一变量(以便我可以将文件1中的列表与文件2中的列表进行比较)。关于变量动态赋值的答案似乎指向了正确的方向——我现在正在研究这个问题。。。不会达到你想要的。我明白这个想法,但是我的列表会有不同的长度,并且不一定排序。我可以想象这样的情况下,这将是我想要的,虽然,所以谢谢!我一直在思考如何将每个文件中的PathwayList保存为唯一变量(以便将文件1中的列表与文件2中的列表进行比较)。关于变量动态赋值的答案似乎指向了正确的方向——我现在正在研究这个问题。。。不会达到你想要的。我明白这个想法,但是我的列表会有不同的长度,并且不一定排序。我可以想象这样的情况下,这将是我想要的,虽然,所以谢谢!好的,列表对我来说似乎很直观-我可以通过索引调用每个列表。似乎还有一个解决方案涉及到一本字典——我的思路是否正确?谢谢你关于资本化的提示——我从《实用计算》一书中学到了这一点