Writeline은 새 줄 없이 줄을 씁니다. 파일만 채웁니다.
파일에 목록을 쓰는 프로그램이 있습니다.목록은 파이프로 구분된 줄의 목록이며 다음과 같이 줄을 파일에 써야 합니다.
123|GSV|Weather_Mean|hello|joe|43.45
122|GEV|temp_Mean|hello|joe|23.45
124|GSI|Weather_Mean|hello|Mike|47.45
하지만 그들은 이렇게 써놨습니다.
123|GSV|Weather_Mean|hello|joe|43.45122|GEV|temp_Mean|hello|joe|23.45124|GSI|Weather_Mean|hello|Mike|47.45
이 프로그램은 줄이 끊어지지 않고 모든 줄을 하나의 줄처럼 썼습니다.이것은 나를 매우 아프게 하고 나는 이것을 되돌릴 방법을 생각해야 합니다. 하지만 어쨌든, 내 프로그램은 여기서 어디가 잘못되었습니까?나는 줄을 쓰는 것이 모든 것을 한 줄에 쓰는 것보다 파일에 줄을 써야 한다고 생각했습니다.
fr = open(sys.argv[1], 'r') # source file
fw = open(sys.argv[2]+"/masked_"+sys.argv[1], 'w') # Target Directory Location
for line in fr:
line = line.strip()
if line == "":
continue
columns = line.strip().split('|')
if columns[0].find("@") > 1:
looking_for = columns[0] # this is what we need to search
else:
looking_for = "Dummy@dummy.com"
if looking_for in d:
# by default, iterating over a dictionary will return keys
new_line = d[looking_for]+'|'+'|'.join(columns[1:])
line_list.append(new_line)
else:
new_idx = str(len(d)+1)
d[looking_for] = new_idx
kv = open(sys.argv[3], 'a')
kv.write(looking_for+" "+new_idx+'\n')
kv.close()
new_line = d[looking_for]+'|'+'|'.join(columns[1:])
line_list.append(new_line)
fw.writelines(line_list)
Python을 에게 꽤 입니다. 있는 전반에 기능은 줄을 Python」의 경우는 ). 특히 표준 라이브러리와 인기 있는 타사 라이브러리 전반에 걸쳐 일부 읽기 기능은 새로운 줄을 제거하지만 쓰기 기능은 거의 없기 때문입니다(단,log
-관련된 것) 추가합니다.
파이썬 코드는 다음과 같은 기능을 합니다.
fw.write('\n'.join(line_list) + '\n')
(단일 문자열 쓰기) 또는
fw.writelines(line + '\n' for line in line_list)
둘 중 하나가 맞으며, 물론 당신은 당신 자신의 글줄을 쓸 수도 있습니다.마무리하는 Newlines 기능으로…
하지만 피할 수 없을 때만 이렇게 해야 합니다.
Greg Hewgill의 제안처럼 처음부터 새 줄을 만들거나 유지할 수 있다면 더 좋습니다.
line_list.append(new_line + "\n")
또한 esuaro가 제안하는 대로 표준 라이브러리의 csv 모듈을 사용하여 원시 텍스트 라인보다 높은 수준으로 작업할 수 있다면 더욱 좋습니다.
를 들어, 를 정의한 , fw
, 다음을 수행할 수 있습니다.
cw = csv.writer(fw, delimiter='|')
그러면 이것 대신에:
new_line = d[looking_for]+'|'+'|'.join(columns[1:])
line_list.append(new_line)
이렇게 하면 됩니다.
row_list.append(d[looking_for] + columns[1:])
그리고 마지막에, 이것 대신에,
fw.writelines(line_list)
이렇게 하면 됩니다.
cw.writerows(row_list)
마지막으로 "파일을 연 다음 파일에 추가할 줄 목록을 작성한 다음 한 번에 모두 작성"하는 설계입니다.위에 파일을 열려면 한 줄씩 다 쓰는 게 어때요?단순한 쓰기를 사용하는지 또는csv.writer
을한 수 .open
프로그램의 반대쪽 끝까지.write
을 거의 하는 을 에 에 을 하는 )
주에 대한 설명서:
writelines()
선 구분자를 추가하지 않음
따라서 직접 추가해야 합니다.예를 들어,
line_list.append(new_line + "\n")
새 항목을 추가할 때마다line_list
.
다른 사람들이 지적했듯이,writelines
는 잘못된 이름입니다(각 줄의 끝에 새 줄을 추가하지 않음).
이렇게 하려면 각 줄에 명시적으로 추가합니다.
with open(dst_filename, 'w') as f:
f.writelines(s + '\n' for s in lines)
writelines()
는 선 구분자를 추가하지 않습니다.다음을 사용하여 문자열 목록을 변경할 수 있습니다.map()
새것을 추가하다\n
각 줄 끝에 줄 바꿈.
items = ['abc', '123', '!@#']
items = map(lambda x: x + '\n', items)
w.writelines(items)
크레딧:Brent Faust
.
형식 문자열이 있는 Python >= 3.6:
with open(dst_filename, 'w') as f:
f.writelines(f'{s}\n' for s in lines)
lines
가 될 수 있습니다set
.
만약 당신이 (나처럼) 오래된 학교라면 당신은 추가할 수 있습니다.f.write('\n')
두 번째 선 아래에
다른 사람들이 언급한 바와 같이 메소드 이름이 의미하는 바와 반대됩니다.writelines
는 선 구분자를 추가하지 않습니다.이것은 발전기의 교과서 케이스입니다.다음은 작위적인 예입니다.
def item_generator(things):
for item in things:
yield item
yield '\n'
def write_things_to_file(things):
with open('path_to_file.txt', 'wb') as f:
f.writelines(item_generator(things))
이점: 입력 또는 출력 값을 수정하거나 복잡한 문자열 연결을 하지 않고 새 줄을 명시적으로 추가합니다.그리고 결정적으로 메모리에 새로운 데이터 구조를 만들지 않습니다.IO(파일에 쓰는 것)는 그러한 종류의 것이 실제로 중요한 경향이 있는 경우입니다.누군가에게 도움이 되길 바랍니다!
우리가 여기서 잘 자리잡았으니,writelines
새 줄을 추가하지 않습니다.하지만, 모든 사람들이 놓치고 있는 것은, 그것이 직접적인 "상대"로 사용될 때는 그럴 필요가 없다는 것입니다.readlines()
그리고 첫번째 읽기는 새로운 선들을 지속했습니다!
이진 모드에서 읽기 위해 파일을 열 때(다음을 통해)'rb'
), 그런 다음 사용합니다.readlines()
파일 내용을 메모리로 가져오려면 줄로 나누어 새 줄은 줄 끝에 붙어 있는 상태로 유지됩니다.그래서 나중에 답장을 쓴다면, 당신은 아마writelines
무엇이든 덧붙일 수 있습니다!
그래서 만약 당신이 다음과 같은 일을 한다면,
with open('test.txt','rb') as f: lines=f.readlines()
with open('test.txt','wb') as f: f.writelines(lines)
당신은 당신이 처음에 했던 것과 같은 파일 내용으로 끝나야 합니다.
우리는 오직 선들만 분리하고 싶어 하고, 그리고.writelines
python의 function은 행 사이에 구분자를 추가하는 것을 지원하지 않습니다. 아래에 이 문제에 가장 적합한 간단한 코드를 적었습니다.
sep = "\n" # defining the separator
new_lines = sep.join(lines) # lines as an iterator containing line strings
그리고 마지막으로:
with open("file_name", 'w') as file:
file.writelines(new_lines)
당신은 끝입니다.
언급URL : https://stackoverflow.com/questions/13730107/writelines-writes-lines-without-newline-just-fills-the-file
'programing' 카테고리의 다른 글
Oracle SQL에서 테이블 삭제 (0) | 2023.09.14 |
---|---|
Razor View Engine이 Mono에 적합합니까? (0) | 2023.09.14 |
재귀적 CTE를 사용하여 레코드가 다른 레코드의 후손인지 확인 (0) | 2023.09.09 |
jQuery ajax 호출에서 응답 시간을 얻으려면 어떻게 해야 합니까? (0) | 2023.09.09 |
MySQL Left JOIN으로 별칭을 사용하는 방법 (0) | 2023.09.09 |