python 3.4.3 txt 텍스트 를 한 줄 씩 읽 고 무 거 운 방법

파일 을 읽 고 쓸 때 주의해 야 할 문 제 는 다음 과 같다.
1.문자 인 코딩
2.작업 완료 즉시 파일 설명자 닫 기
3.코드 호환성
몇 가지 방법:

#!/bin/python3
original_list1=[" "]
original_list2=[" "]
original_list3=[" "]
original_list4=[" "]
newlist1=[" "]
newlist2=[" "]
newlist3=[" "]
newlist4=[" "]
newtxt1=""
newtxt2=""
newtxt3=""
newtxt4=""
#first way to readline
f = open("duplicate_txt.txt","r+")    #           
line = f.readline()           #       readline()   
while line:  
  original_list1.append(line)          
  line = f.readline()  
f.close() 
#use "set()" remove duplicate str in the list
# in this way,list will sort randomly
newlist1 = list(set(original_list1))
#newlist1 = {}.fromkeys(original_list1).keys() #faster 
#rebuild a new txt 
newtxt1="".join(newlist1)
f1 = open("noduplicate1.txt","w")
f1.write(newtxt1)
f1.close()
###################################################################
#second way to readline
for line in open("duplicate_txt.txt","r+"):  
  original_list2.append(line)
newlist2 = list(set(original_list2))
newlist2.sort(key=original_list2.index)         #sort
#newlist2 = sorted(set(original_list2),key=l1.index)  #other way
newtxt2="".join(newlist2)
f2 = open("noduplicate2.txt","w")
f2.write(newtxt2)
f2.close()
###################################################################
#third way to readline
f3 = open("duplicate_txt.txt","r")  
original_list3 = f3.readlines()       #       ,         
for i in original_list3:          #    
  if not i in newlist3:
      newlist3.append(i)
newtxt3="".join(newlist3)
f4 = open("noduplicate3.txt","w")
f4.write(newtxt3)
f4.close()
###################################################################
#fourth way
f5 = open('duplicate_txt.txt',"r+") 
try: 
  original_list4 = f5.readlines() 
  [newlist4.append(i) for i in original_list4 if not i in newlist4]
  newtxt4="".join(newlist4)
  f6 = open("noduplicate4.txt","w")
  f6.write(newtxt4)
  f6.close()
finally: 
  f5.close()
결과:
다시 가기 전:

무 거 운 것 을 제거 한 후(무질서):

무 거 운 것 을 제거 한 후(질서 있 게):

총결산
이 다음 프로그램 은 파일 읽 기와 쓰기 작업 과 링크 List 의 작업 과 관련 되 어 있 습 니 다.글 에서 처음에 언급 한 몇 가지 문 제 는 중국 어 를 사용 하지 않 았 기 때문에 인 코딩 에 관심 이 없 지만 여기 서 언급 해 야 합 니 다.

f = open("test.txt","w")
f.write(u"  ")
위의 코드 가 python 2 에서 실행 되면 오류 가 발생 합 니 다.

오 류 는 프로그램 이 유 니 코드 문자열 을 직접 저장 할 수 없 기 때문에 인 코딩 을 통 해 str 형식의 바 이 너 리 바이트 시퀀스 로 변환 해 야 저장 할 수 있 습 니 다.
write()방법 은 자동 으로 인 코딩 변환 되 며,기본적으로 ascii 인 코딩 형식 을 사용 합 니 다.ascii 는 중국 어 를 처리 할 수 없 기 때문에 UnicodeEncodeError 가 발생 합 니 다.
정확 한 방식 은 write()방법 을 호출 하기 전에 수 동 형식 으로 변환 하고 utf-8 또는 gbk 로 str 로 변환 하 는 것 입 니 다.

f = open("test.txt","w")
text=u"  "
text=text.encode(encoding='utf-8')
f.write(text)
close()문제:
닫 지 않 으 면 어떤 영향 이 있 을까요?작업 이 끝 난 후에 파일 을 닫 지 않 으 면 시스템 자원 에 낭 비 를 초래 할 수 있 습 니 다.시스템 이 열 수 있 는 파일 설명자 의 수량 이 제한 되 어 있 기 때 문 입 니 다.리 눅 스 는 65535 입 니 다.
일반적으로 close 이후 에는 OK 이지 만 특수 한 상황 도 존재 합 니 다.예 를 들 어 open()함 수 를 호출 할 때 이미 오류 가 발생 했 고 권한 이 부족 하 며 close()를 호출 하면 오류 가 발생 할 수 있 습 니 다.또 하 나 는 write()때 디스크 공간 이 부족 하면 오 류 를 보고 하고 close()를 실행 할 기회 가 없다 는 것 이다.올 바른 방법 은 try except 를 사용 하여 이상 을 캡 처 하 는 것 입 니 다:

f = open("test.txt","w")
try:
  text=u"  "
  text=text.encode(encoding='utf-8')
  f.write(text)
except: IOError as e:
  print("oops,%s"%e.args[0])
finally:
  f.close()
더 우아 한 문법 은 with...as.

with open("test.txt","w") as f:
  text=u"  "
  f.write(text.encode(encoding='utf-8'))
파일 대상 은 오후 관리자 프로 토 콜 을 실현 합 니 다.프로그램 이 with 구문 에 들 어 갈 때 파일 대상 을 변수 f 에 할당 하고 프로그램 이 with 를 종료 할 때 close()방법 을 자동 으로 호출 합 니 다.
호환성 문제:
python 2 와 python 3 의 open()함 수 는 다 릅 니 다.후 자 는 함수 에서 문자 인 코딩 형식 을 지정 할 수 있 습 니 다.
python 2 와 python 3 의 호 환 open()문 제 를 어떻게 해결 합 니까?
io 모듈 의 open()함수,python 2 의 io.open 등가 와 python 3 의 open 함 수 를 사용 합 니 다.

from io import open
with open("test.txt","w",encoding='utf-8') as f:
  f.write(u"  ")
이상 의 python 3.4.3 에서 한 줄 한 줄 씩 txt 텍스트 를 읽 고 다시 읽 는 방법 은 바로 편집장 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 많은 응원 을 바 랍 니 다.

좋은 웹페이지 즐겨찾기