tsv 파일의 4 열에서 모든 구두점을 제거한 다음 전체 파일을 저장하고 싶습니다. 이것은 내 코드입니다.
import csv
import string
exclude = set(string.punctuation)
with open("test1") as tsvfile:
tsvreader = csv.reader(tsvfile, delimiter="\t")
for line in tsvreader:
line[4] = ''.join(ch for ch in line[4] if ch not in exclude)
tsvfile.close()
위의 코드는 잘 작동하지만 파일이 내가 변경 한 내용으로 저장되지 않았습니다. 이전 파일에 변경 사항을 어떻게 저장할 수 있습니까?
변경 사항을 작성하는 것이 아니라 단순히 각 행의 다섯 번째 요소를 변경하고 아무것도 수행하지 않는 것입니다. 원본 파일을 변경하려면 a에 쓸 수 있고 원본 파일을 업데이트 된 임시 파일로 바꾸려면 tempfile
a shutil.move
를 수행하십시오.
import string
exclude = string.punctuation
from tempfile import NamedTemporaryFile
from shutil import move
with open("test1") as tsvfile, NamedTemporaryFile(dir=".",delete=False) as t:
tsvreader = csv.reader(tsvfile, delimiter="\t")
temp = csv.writer(t,delimiter="\t")
for row in tsvreader:
row[4] = row[4].strip(exclude)
temp.writerow(row)
move(t.name,"test1")
원본을 업데이트하는 대신 새 파일을 생성하려면 새 파일을 열고 정리 된 각 행을 작성하면됩니다.
with open("test1") as tsvfile, open("out","w") as t:
tsvreader = csv.reader(tsvfile, delimiter="\t")
temp = csv.writer(t,delimiter="\t")
for row in tsvreader:
row[4] = row[4].strip(exclude)
temp.writerow(row)
구두점을 제거하는 str.strip(exclude)
것으로 충분합니다. 어디에서나 제거하려면 다시 돌아갈 수 ''.join([ch for ch in line[4] if ch not in exclude])
있지만 어디에서 제거했으면 다음을 사용해야합니다 str.translate
.
row[4] = row[4].translate(None,exclude)
공백을 추가하려는 경우 :
from string import maketrans
tbl = maketrans(exclude," "*len(exclude))
....
row[4] = row[4].translate(tbl)
실제로 네 번째 열을 의미하는 마지막 경우 그것은 것입니다 row[3]
하지row[4]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다