나는 생성자가 파일 목록을 취하는 클래스 객체를 만들려고 시도하고 있습니다. 각 객체는 문자열 목록 (한 줄에 하나씩)으로 변환하고 모든 목록을 연결합니다 함께 보관하고 보관합니다. 이 클래스는 또한리스트파일 목록을 파이썬에서 문자열 목록으로 연결하기
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
그러나 chooseline()를 그렇지 않니? 문제가 무엇인지 파악하기가 힘듭니다. 당신은 단지 '아무것도하지 않는다()이 대신
import fileinput
lines = list(fileinput.input(paths))
'self.lines + f.readlines에 대한
fileinput
을 사용할 수 있습니다 그러나 – Volatility'def __init __ (self, filename = []) :'그 습관이 당신을 곤경에 빠뜨릴 것입니다. 기본 인수로 목록과 같은 변경 가능한 객체를 사용하지 마십시오. 설명은 [here] (http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument)를 참조하십시오. 왜. – DSM
@DSM 감사합니다. 대신 무엇을 사용해야합니까? *파일 이름 ? – user2303321