小さな要件:
ソフトウェアの著作権を申請する場合、50行のページ、合計60ページのソースコードを送信する必要があります。しかし、設計されたプロジェクトはマルチレベルのディレクトリに保存され、1つずつコピーするのではなく、python、osモジュールを介してすべてのディレクトリのファイルを取得し、無効なソースコードを再正規化してフィルタリングし、docxモジュールに基づいて単語に書き込みます。関連するモジュールは、os、docx、reです。
2つの大きなステップに分かれます:
1.まず、フォルダー内のすべてのフォルダーの.javaファイルパスをリストに保存します
。2. リストのパスを順番に読み取り、.javaファイルの内容をwordに保存します
#!/ usr / bin / env python # -*-coding:utf-8-*- "" " __title__ = '' __author__ = 'mike_jun' __mtime__ = '2019-7-1'#目的 : 1. 最初に1つ置くリスト内のフォルダの下にフォルダ内のすべてのファイルを保存するための.javaファイルのパス 2 。順番で単語にの.javaファイルの内容を保存するためのパスのリストを読み込む 「」 " インポートOS docxファイルからのインポート文書 docx.oxml.nsからimport qn from docx.shared import Pt import re from docx.shared import 長さ fileList = []#グローバルリストを使用してファイルパスを保存 def getAllFile(path、fileList):#再帰メソッドを使用し dirList = []#保存フォルダー ファイル = os.listdir(パス)#ファイル内のfのファイルとフォルダーを含むリストを返し ます: if(os.path.isdir(パス+ '/' + f)): dirList.append(path + '/' + f)# (os.path.isfile(path + '/' + f))の場合にフォルダー名を保存: fileList.append(path + '/' + f)# dirList にdir のファイル名を保存します。#フォルダーが空の場合、再帰的に自動的に終了します getAllFile(dir、fileList)#再帰的に保存して.javaファイルをfileListに保存します getAllFile(r 'E:\ src \ main \ java \ com \ gdut ' 、fileList) print( 'ファイル数: ' 、len(fileList)) def getJavaFile(fileList): for file in fileList: if not file.endswith( ' 。java ' ):#not of the format of not .java file fileList.remove(file) print( 'The number of files is:' 、len(fileList) ) getJavaFile(fileList) print(os.path.isfile(fileList [ 0 ]))#最初の値がファイルかどうかを判別 def saveDocFile(): #SINGLE => 1行の間隔(デフォルト) #ONE_POINT_FIVE => 1.5行間隔 #ダブルサイズ => 間隔。 #AT_LEAST => 分 #EXACTLY => 固定値 #複数 => 時間間隔 doc = docxからのドキュメント()enum .text import WD_LINE_SPACING p = doc.add_paragraph( '' ) #ページを追加doc.styles [ 'Normal']。font.name = 'Times New Roman' #テキストは正常です、設定されていますテキストのフォント形式 doc.styles [ 'Normal']。Font.size = Pt(8)#フォントサイズをサイズ5に設定しますfont p.line_spacing_rule = WD_LINE_SPACING.EXACTLY#固定値 段落 _フォーマット= doc.styles ['通常]] .paragraph_format paragraph_format.line_spacing =のPt(12.9 )#固定値12,9ポイント、ページあたり50行のコードを保証 SAVE_FILE! = r'E:\ Text.doc「 codeNum = 0 のために i、f in enumerate(fileList): print( ' starting deal%d '%i) with open(f、encoding =' UTF-8 ' )as file :#は、正しい出力形式を達成するために中国をトランスコード 用file.readlinesの行を(): IFライン== '\ N-' :#削除空白行が 続行 IF re.match(R&LT '^ \ S + $' 、行):#空白行にすべてのスペースを削除するには、正規表現を使用 続行 のIFラインは.__ __(「/ *」rを含んで)または\ __(R含ま.__ライン「*」:) #コメントを削除して続行 if line .__ contains __(r '//'):#delete contains // continue p.add_run(line) codeNum + = 1 #レコードがすでに書き込まれている 場合 codeNum == 3050:#印刷出力が60 ページ doc.save(save_file)return doc.save(save_file)#保存する60ページ未満 print( 'all done' ) saveDocFile() print( 'all done')コメントは、厳密に言えば、正規表現を使用して削除する必要があります
不利な点もあります:ヘッダー、ページ番号、タイトルページは行われません。手動で行うこともできますよね。