>  기사  >  백엔드 개발  >  python3.4.3에서 txt 텍스트를 한 줄씩 읽고 중복을 제거하는 방법

python3.4.3에서 txt 텍스트를 한 줄씩 읽고 중복을 제거하는 방법

不言
不言원래의
2018-05-02 16:17:422899검색

이 글은 python3.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()

결과:

중복 제거 전:

중복 제거 후(순서 없음):

중복 제거 후(순서대로):

Summary

아래 프로그램에는 파일 읽기 및 쓰기 작업과 연결 목록 작업이 포함되어 있습니다. 기사 시작 부분에 언급된 몇 가지 문제는 중국어가 아니므로 인코딩에 대해서는 신경 쓰지 않습니다. 여기에 언급하고 싶습니다:

f = open("test.txt","w")
f.write(u"你好")

위 코드가 python2에서 실행되면 오류가 보고됩니다

프로그램이 유니코드 문자열을 직접 저장할 수 없기 때문에 오류가 보고됩니다. 인코딩해야 합니다. 저장하기 전에 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입니다.

일반적으로 닫으면 괜찮지만 특별한 상황이 있을 수 있습니다. 예를 들어 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에 할당되고 프로그램이 실행될 때 close() 메서드가 자동으로 호출됩니다. 로 종료됩니다.

호환성 문제 정보:

python2와 python3의 open() 함수는 서로 다릅니다. 후자는 함수에서 문자 인코딩 형식을 지정할 수 있습니다.

python2와 python3 간의 호환성 open() 문제를 해결하는 방법은 무엇입니까?

io 모듈에서 open() 함수를 사용하세요. python2의 io.open은 python3의 open 함수와 동일합니다. _python

위 내용은 python3.4.3에서 txt 텍스트를 한 줄씩 읽고 중복을 제거하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.