[PYTHON] 파일의 텍스트를 파이썬으로 대체하기
PYTHON파일의 텍스트를 파이썬으로 대체하기
나는 Python을 처음 사용한다. 나는 파일을 열고 특정 단어의 모든 인스턴스를 파이썬을 통해 주어진 치환으로 대체 할 수 있기를 원합니다. 예를 들어 모든 단어를 '0'으로 'temp'를 'bob'로 바꾸고 'nothing'으로 'garbage'라고 말하십시오.
나는 이것을 처음 사용하기 시작했다.
for line in fileinput.input(fin):
fout.write(line.replace('zero', '0'))
fout.write(line.replace('temp','bob'))
fout.write(line.replace('garbage','nothing'))
그러나 나는 이것이 이것을하기위한 심지어 원격으로 올바른 방법이라고 생각하지 않는다. 그런 다음 if 문을 사용하여 행에 이러한 항목이 있는지 확인한 다음 해당 항목이 포함되어 있는지 확인한 다음 그 행이 포함하는 행을 바꿉니다.하지만 Python에 대해 알고있는 것에서도 이것이 이상적인 해결책은 아닙니다. 나는 이것을하는 가장 좋은 방법을 알고 싶다. 미리 감사드립니다!
해결법
-
==============================
1.이게해야 해.
이게해야 해.
replacements = {'zero':'0', 'temp':'bob', 'garbage':'nothing'} with open('path/to/input/file') as infile, open('path/to/output/file', 'w') as outfile: for line in infile: for src, target in replacements.iteritems(): line = line.replace(src, target) outfile.write(line)
편집 : Eildosa의 의견을 언급하기 위해, 만약 당신이 다른 파일에 쓰지 않고 이것을하고 싶다면, 결국 전체 소스 파일을 메모리에 읽어 들일 필요가 있습니다 :
lines = [] with open('path/to/input/file') as infile: for line in infile: for src, target in replacements.iteritems(): line = line.replace(src, target) lines.append(line) with open('path/to/input/file', 'w') as outfile: for line in lines: outfile.write(line)
편집 : Python 3.x를 사용하는 경우 replacements.iteritems () 대신 replacements.items ()를 사용하십시오.
-
==============================
2.내가 dict 및 re.sub 이런 식으로 뭔가를 사용하는 것이 좋습니다 :
내가 dict 및 re.sub 이런 식으로 뭔가를 사용하는 것이 좋습니다 :
import re repldict = {'zero':'0', 'one':'1' ,'temp':'bob','garage':'nothing'} def replfunc(match): return repldict[match.group(0)] regex = re.compile('|'.join(re.escape(x) for x in repldict)) with open('file.txt') as fin, open('fout.txt','w') as fout: for line in fin: fout.write(regex.sub(replfunc,line))
이것은 중첩되는 일치에 대해 좀 더 견고하다는 점에서 대체하는 데 약간의 이점이 있습니다.
-
==============================
3.파일이 짧거나 너무 길지 않은 경우 다음 스 니펫을 사용하여 제자리에있는 텍스트를 바꿀 수 있습니다.
파일이 짧거나 너무 길지 않은 경우 다음 스 니펫을 사용하여 제자리에있는 텍스트를 바꿀 수 있습니다.
# Replace variables in file with open('path/to/in-out-file', 'r+') as f: content = f.read() f.seek(0) f.truncate() f.write(content.replace('replace this', 'with this'))
-
==============================
4.필수적인 방법은
필수적인 방법은
전체 데이터를 한 번에 더 작은 부분으로 읽고 쓰는 것은 귀하에게 달려 있습니다. 예상되는 파일 크기에 따라 달라 지도록해야합니다.
read ()는 파일 객체에 대한 반복으로 대체 될 수 있습니다.
-
==============================
5.그것을 쓰는 더 빠른 방법은 ...
그것을 쓰는 더 빠른 방법은 ...
in = open('path/to/input/file').read() out = open('path/to/input/file', 'w') replacements = {'zero':'0', 'temp':'bob', 'garbage':'nothing'} for i in replacements.keys(): in = in.replace(i, replacements[i]) out.write(in) out.close
이렇게하면 다른 답변에서 제시하는 많은 반복 작업을 생략 할 수 있으므로 긴 파일을 처리하는 속도가 빨라집니다.
-
==============================
6.표준 입력을 읽으려면 다음과 같이 'code.py'를 작성하십시오.
표준 입력을 읽으려면 다음과 같이 'code.py'를 작성하십시오.
import sys rep = {'zero':'0', 'temp':'bob', 'garbage':'nothing'} for line in sys.stdin: for k, v in rep.iteritems(): line = line.replace(k, v) print line
그런 다음 리디렉션 또는 파이핑을 사용하여 스크립트를 실행하십시오 (http://en.wikipedia.org/wiki/Redirection_(computing)).
python code.py < infile > outfile
-
==============================
7.이것은 방금 사용했던 간단하고 간단한 예입니다.
이것은 방금 사용했던 간단하고 간단한 예입니다.
만약:
fp = open("file.txt", "w")
그때:
fp.write(line.replace('is', 'now')) // "This is me" becomes "This now me"
아니:
line.replace('is', 'now') fp.write(line) // "This is me" not changed while writing
from https://stackoverflow.com/questions/13089234/replacing-text-in-a-file-with-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] "#! / usr / bin / env python"을 사용하여 파이썬에 인수를 전달할 수 없습니다. (0) | 2018.10.11 |
---|---|
[PYTHON] if 문을 사용하여 목록 작성 (0) | 2018.10.11 |
[PYTHON] 파이썬 2.7의 문자열에서 유니 코드 \ u2026을 제거하는 중 (0) | 2018.10.11 |
[PYTHON] 파이썬에서 stdout에 C 공유 라이브러리가 인쇄되지 않게하려면 어떻게해야합니까? (0) | 2018.10.11 |
[PYTHON] 파이썬을 통해 연결할 때 기본 Mysql 연결 시간 초과를 어떻게 바꿀 수 있습니까? (0) | 2018.10.11 |