복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    4.필수적인 방법은

    필수적인 방법은

    전체 데이터를 한 번에 더 작은 부분으로 읽고 쓰는 것은 귀하에게 달려 있습니다. 예상되는 파일 크기에 따라 달라 지도록해야합니다.

    read ()는 파일 객체에 대한 반복으로 대체 될 수 있습니다.

  5. ==============================

    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. ==============================

    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. ==============================

    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
    
  8. from https://stackoverflow.com/questions/13089234/replacing-text-in-a-file-with-python by cc-by-sa and MIT license