write(write) 대 writeline(write string
그래서 파이썬을 배우고 있습니다.나는 수업을 받고 있는데 많은 것을 응축해야 하는 문제에 부딪혔습니다.target.write()
단판에write()
술을 마시고 있을 때"\n"
각 사용자 입력 변수(의 객체) 사이write()
).
제가 생각해낸 것은:
nl = "\n"
lines = line1, nl, line2, nl, line3, nl
textdoc.writelines(lines)
내가 하려고 하는 경우:
textdoc.write(lines)
오류가 발생했습니다.하지만 입력하면 다음과 같습니다.
textdoc.write(line1 + "\n" + line2 + ....)
그러면 작동이 잘 됩니다.새 줄에 문자열을 사용할 수 없는 이유는 무엇입니까?write()
하지만 저는 그것을 사용할 수 있습니다.writelines()
?
파이썬 2.7
writelines
상당한 문자열을 기대합니다.write
에서는 단일 문자열이 필요합니다.
line1 + "\n" + line2
에 전달하기 전에 이러한 문자열을 하나의 문자열로 병합합니다.write
.
줄이 많은 경우 다음을 사용할 수 있습니다."\n".join(list_of_lines)
.
write()에서는 새 줄에 문자열을 사용할 수 없지만 writeline()에서는 사용할 수 있는 이유는 무엇입니까?
아이디어는 다음과 같습니다. 만약 당신이 단일 문자열을 쓰고 싶다면 당신은 이것을 할 수 있습니다.write()
일련의 문자열이 있는 경우 다음을 사용하여 모두 쓸 수 있습니다.writelines()
.
write(arg)
문자열을 인수로 예상하고 파일에 씁니다.문자열 목록을 제공하면 예외가 발생합니다(참고로 오류 표시!).
writelines(arg)
반복 가능한 인수(반복 가능한 개체는 일반적인 의미에서 튜플, 목록, 문자열 또는 반복자일 수 있음)를 예상합니다.반복기에 포함된 각 항목은 문자열이어야 합니다.줄의 튜플은 당신이 제공한 것이기 때문에 일이 잘 진행되었습니다.
문자열의 특성은 두 기능 모두에 중요하지 않습니다. 즉, 문자열은 사용자가 제공하는 모든 것을 파일에 기록합니다.흥미로운 부분은writelines()
에서는 줄 바꿈 문자를 자체적으로 추가하지 않으므로 메소드 이름이 실제로 상당히 혼동될 수 있습니다.그것은 실제로 상상의 방법처럼 행동합니다.write_all_of_these_strings(sequence)
.
다음은 Python에서 각 문자열을 고유한 줄로 유지하면서 문자열 목록을 파일에 작성하는 관용적인 방법입니다.
lines = ['line1', 'line2']
with open('filename.txt', 'w') as f:
f.write('\n'.join(lines))
이렇게 하면 파일을 닫을 수 있습니다.컨스트럭트'\n'.join(lines)
목록의 문자열을 연결(연결)합니다.lines
그리고 '\n'자를 접착제로 사용합니다.사용하는 것보다 더 효율적입니다.+
교환입니다.
동일한 것부터 시작lines
시퀀스, 동일한 출력으로 끝나지만 사용writelines()
:
lines = ['line1', 'line2']
with open('filename.txt', 'w') as f:
f.writelines("%s\n" % l for l in lines)
이렇게 하면 생성기 식을 사용하여 줄 바꿈 문자열을 동적으로 만듭니다.writelines()
이 문자열 시퀀스를 반복하고 모든 항목을 씁니다.
편집: 주의해야 할 또 다른 사항:
write()
그리고.readlines()
이에존던 이전에 했습니다.writelines()
소개되었습니다.writelines()
에 의대물나소습다니었개의 되었습니다.readlines()
따라서 방금 읽은 파일 내용을 쉽게 쓸 수 있습니다.readlines()
:
outfile.writelines(infile.readlines())
정말로, 이것이 가장 중요한 이유입니다.writelines
이름이 너무 헷갈리네요.또한, 오늘날, 우리는 더 이상 이 방법을 사용하고 싶지 않습니다.readlines()
들이는 작업을 수행합니다.writelines()
데이터 쓰기를 시작합니다.무엇보다도, 이것은 시간을 낭비할 수 있습니다.다른 부분을 읽는 동안 데이터의 일부를 쓰기 시작하는 것은 어떻습니까?그러나 가장 중요한 것은 이 접근 방식이 매우 많은 메모리를 소비할 수 있다는 점입니다.입력 파일이 컴퓨터의 메모리보다 큰 극단적인 시나리오에서는 이 접근 방식이 제대로 작동하지 않습니다.이 문제에 대한 해결책은 반복기만 사용하는 것입니다. 예 예:
with open('inputfile') as infile:
with open('outputfile') as outfile:
for line in infile:
outfile.write(line)
입력 파일을 한 줄씩 읽습니다.한 줄을 읽자마자 이 줄은 출력 파일에 기록됩니다.개략적으로 말하면, 메모리에는 항상 한 줄만 있습니다(읽기 줄/쓰기 줄 접근 방식의 경우 전체 파일 내용이 메모리에 있는 것과 비교).
사실, 저는 당신의 변수 "라인"이 나쁘다는 것이 문제라고 생각합니다.줄을 튜플로 정의했지만 write()에는 문자열이 필요하다고 생각합니다.쉼표를 더하기(+)로 바꾸기만 하면 됩니다.
nl = "\n"
lines = line1+nl+line2+nl+line3+nl
textdoc.writelines(lines)
작동해야 합니다.
제드 쇼의 책에서 16번 연습?다음과 같이 이스케이프 문자를 사용할 수 있습니다.
paragraph1 = "%s \n %s \n %s \n" % (line1, line2, line3)
target.write(paragraph1)
target.close()
목록을 저장하고 로드하려면 피클을 사용해 보십시오.
피클 저장:
with open("yourFile","wb")as file:
pickle.dump(YourList,file)
로드:
with open("yourFile","rb")as file:
YourList=pickle.load(file)
언급URL : https://stackoverflow.com/questions/12377473/write-versus-writelines-and-concatenated-strings
'programing' 카테고리의 다른 글
테이블의 CONNECT BY LEVEL이 추가 행을 반환하는 이유는 무엇입니까? (0) | 2023.07.21 |
---|---|
봄 부츠와 그라들이 있는 CTRL+C는 그라들 데몬을 죽인다. (0) | 2023.07.21 |
Oracle에서 IPv4/IPv6 주소 표시 (0) | 2023.07.21 |
루비에서 기호를 해시 키로 사용하는 이유는 무엇입니까? (0) | 2023.07.21 |
Oracle: 'order by' 절이 있는 행 번호 표시 (0) | 2023.07.21 |