Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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_File_Concatenation - Fatal编程技术网

在Python中将文件列表连接到字符串列表中

在Python中将文件列表连接到字符串列表中,python,file,concatenation,Python,File,Concatenation,我试图创建一个类对象,其构造函数接受一个文件列表,将每个文件转换为一个字符串列表(每行一个),并将所有列表连接在一起并存储。此类还包含一个成员函数,该函数从列表中输出一个随机行 class randline: def __init__(self, filename = [] ): #def __init__(self, filename = [] , *args): #for i in range(len(filename)): self

我试图创建一个类对象,其构造函数接受一个文件列表,将每个文件转换为一个字符串列表(每行一个),并将所有列表连接在一起并存储。此类还包含一个成员函数,该函数从列表中输出一个随机行

class randline:
    def __init__(self, filename = [] ):
        #def __init__(self, filename = [] , *args):

        #for i in range(len(filename)):
        self.lines = []

        for path in filename:
           with open(path, 'r') as f:
                self.lines + f.readlines()
                f.close()

    def chooseline(self):
      if self.lines:
        return random.choice(self.lines)

def main():
#...
    try:
        generator = randline(args)
        for index in range(numlines):
            sys.stdout.write(generator.chooseline())
    except IOError as (errno, strerror):
        parser.error("I/O error({0}): {1}".
                     format(errno, strerror))
这将生成错误消息:

Traceback (most recent call last):
  File "./1randline.py", line 59, in <module>
    main()
  File "./1randline.py", line 53, in main
    sys.stdout.write(generator.chooseline())
TypeError: expected a character buffer object
回溯(最近一次呼叫最后一次):
文件“/1randline.py”,第59行,在
main()
文件“/1randline.py”,第53行,在main中
sys.stdout.write(generator.chooseline())
TypeError:应为字符缓冲区对象
但是chooseline()从串联文件字符串列表中生成一个字符串,不是吗?所以我很难找出问题所在。

应该是

self.lines += f.readlines() # notice the += 
# self.lines.extend(f.readlines()) is equivalent
但是,您只需使用
fileinput
即可

import fileinput
lines = list(fileinput.input(paths))
应该是

self.lines += f.readlines() # notice the += 
# self.lines.extend(f.readlines()) is equivalent
但是,您只需使用
fileinput
即可

import fileinput
lines = list(fileinput.input(paths))

self.lines+f.readlines()
什么都不做。也许你想要
self.lines+=f.readlines()
?关于
def\uuu init\uuuu(self,filename=[]):
——这个习惯会给你带来麻烦。不要使用列表等可变对象作为默认参数——请参阅以了解原因的解释。@DSM谢谢,我应该使用什么来代替*文件名?
self.lines+f.readlines()
不起任何作用。也许你想要
self.lines+=f.readlines()
?关于
def\uuu init\uuuu(self,filename=[]):
——这个习惯会给你带来麻烦。不要使用列表等可变对象作为默认参数——请参阅以了解原因的解释。@DSM谢谢,我应该使用什么来代替*文件名?