Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python初学者-如何将多个文件的内容读入唯一列表?_Python_For Loop_Readlines - Fatal编程技术网

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

我想把几个文件中的内容读入我以后可以调用的唯一列表中——最终,我想将这些列表转换为集合,并对它们执行交集和减法。这一定是一个非常天真的问题,但是在仔细阅读了Lutz的“学习Python”中的迭代器和循环部分之后,我似乎无法理解如何处理这个问题。以下是我写的:

#!/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中的列表进行比较)。关于变量动态赋值的答案似乎指向了正确的方向——我现在正在研究这个问题。。。不会达到你想要的。我明白这个想法,但是我的列表会有不同的长度,并且不一定排序。我可以想象这样的情况下,这将是我想要的,虽然,所以谢谢!好的,列表对我来说似乎很直观-我可以通过索引调用每个列表。似乎还有一个解决方案涉及到一本字典——我的思路是否正确?谢谢你关于资本化的提示——我从《实用计算》一书中学到了这一点