Python은 대량 처리 파일의 축소와 디코딩 문제를 실현합니다

4766 단어
최근 오래전 C 코드를 Github에 올렸을 때 수백 개의 원본 파일의 코드가 8칸으로 축소된 것을 발견했고 그 안의 중국어가 모두 엉망이 되어 모든 파일의 형식을 대량으로 처리하는 프로그램을 쓰기로 했다.이 디코딩에 관한 코드는 윈도에서 기본 인코딩은 GBK이고 리눅스에서 기본 인코딩은 UTF-8이며 양자간에 전송된 파일에 중국어가 나오면 디코딩을 해야 한다.
4
  • 문제 분석 축소 문제는 vc를 사용할 때 탭을 4개의 빈칸으로 설정하지 않았고 Github의 탭 키가 기본적으로 8칸으로 표시되었기 때문이다.중국어 난자 문제는 vc++가 GBK 인코딩을 사용했기 때문이다

  • 4
  • 해결 방향 1.Tab을 공백으로 대체하고 Python 프로그램을 통해 각 줄의 C 코드를 읽으며 대응하는 공백 개수를 계산하여 처음과 끝의 공백을 제거하는 원본 문자열에 추가하기 전에 새 줄을 만들고 새 파일을 작성합니다.2. 디코딩 문제는 파이썬의 특성에 따라 문자열을 한 줄 읽은 후 내부에서 자동으로 디코딩(decode)을 유니코드 형식으로 하고 쓸 때utf-8로 인코딩(encode)하고 출력하면 인코딩 변환이 가능합니다.파이썬 입력 출력의 기본 인코딩은cp936 (gbk) 이며, 파일을 열 때 파일에 쓸 인코딩 형식을 지정해야 합니다.3. 프로그램은 원본 폴더의 경로만 수신하고 디렉터리에 있는 모든 C 파일을 반복해서 새 폴더로 출력한다. 새 폴더는 원본 폴더가 있는 디렉터리와 같고 패키지 구조가 완전히 같다
  • import os, codecs
    
    #           (  Tab        )
    def count_space(st):
        count = 0
        if st == '
    '
    : return 0 for ch in st: if ch == '\t': count = count + 4 elif ch == ' ': count = count + 1 else: break return count # :1. tab 2. utf-8 def process_file(src_path, dest_path): # utf-8 # open(dest_path, 'w', encoding = 'utf8') with open(src_path, 'r') as fr, codecs.open(dest_path, 'w', 'utf-8') as fw: for line in fr.readlines(): clean_line = line.strip() n_space = count_space(line) i = 0 sp = '' while i < n_space: sp = sp + ' ' i = i + 1 line = sp + clean_line + '
    '
    fw.write(line) # def travel(src_path, dest_path, item): if not os.path.isdir(src_path): if os.path.splitext(src_path)[1] == item: process_file(src_path, dest_path) # , return if not os.path.isdir(dest_path): # os.mkdir(dest_path) # for filename in os.listdir(src_path): travel(os.path.join(src_path, filename), os.path.join(dest_path, filename), item) if __name__ == '__main__': src_root = 'C:\\Users\\Administrator\\Desktop\\C-Primer-Plus' # ( ) dest_root = src_root + '-new' item = '.c' travel(src_root, dest_root, item)

    좋은 웹페이지 즐겨찾기