用python將項目中的所有代碼(或txt)合並在一個文件中


設計模式開卷考試給的例子代碼都是一個類一個java,實在太惡心了,所以寫了一個python腳本.

import os
fileansdir=r'C:\Users\tonyson_in_the_rain\Desktop\筆記\JAVA代碼\設計模式'

主要用的os庫

API總結:

  • files=listdir(path) 顯示當前目錄的所有文件名和目錄名
  • endswith() 選擇擴展名
  • windows的路徑只需要前面加一個r即可在python程序中使用
  • 把合並的文件在當前目錄保存,也可以改成某一目錄保存,但是要注意名字

combine函數是一個子過程,可以把dirpath目錄下的所有文件合並為一個文件

def combine(dirPath,filename):
    files=os.listdir(dirPath)
    res=""
    i = 0
    for file in files:
        if file.endswith(".java"):
            i+=1
            title=file

            with open(dirPath+'\\'+file,"r")as file:
                content=file.read()
                file.close()
            res+='\n\n'

            res+='#### '+title
            res+='\n\n'
            res+='```\n'
            res+=content
            res+='\n```\n'

            with open(dirPath+'\\'+filename+'.txt','w')as outFile:
                outFile.write(res)
                outFile.close()

然后遍歷各個文件夾分別跑一遍子過程即可

import os


def EnumPathFiles(path, callback):
    ii=0
    if not os.path.isdir(path):
        print('Error:"',path,'" is not a directory or does not exist.')
        return
    list_dirs = os.walk(path)

    for root, dirs, files in list_dirs:
        
        for d in dirs:
            EnumPathFiles(os.path.join(root, d), callback)
            dirc=path+'\\'+d
            print(dirc)
            if(dirc.endswith('memento')):
                continue
            ii+=1
            name=d
            
            combine(dirc,name)


def callback1(path, filename):
    print(path+'\\'+filename)

EnumPathFiles(r'C:\Users\tonyson_in_the_rain\Desktop\大三上學習\設計模式\設計模式2018(張欣佳)', callback1)

這里會報一個錯誤,因為子目錄對不上號的原因,不過在這之前有用的目錄我們已經跑過了,所以不用管了.

合成的md文件如下:不過是按照類名字典序排的,需要手動調整順序

Apple.java

public class Apple implements Product
{
  public void accept(Visitor visitor)
  {
      visitor.visit(this);
  }	
}

Book.java

public class Book implements Product
{
  public void accept(Visitor visitor)
  {
      visitor.visit(this);
  }	
}

BuyBasket.java

import java.util.*;

public class BuyBasket
{
	private ArrayList list=new ArrayList();
	
	public void accept(Visitor visitor)
	{
		Iterator i=list.iterator();
		
		while(i.hasNext())
		{
			((Product)i.next()).accept(visitor);	
		}
	}
	
	public void addProduct(Product product)
	{
		list.add(product);
	}
	
	public void removeProduct(Product product)
	{
		list.remove(product);
	}
}

Client.java

public class Client
{
	public static void main(String a[])
	{
		Product b1=new Book();
		Product b2=new Book();
		Product a1=new Apple();
		Visitor visitor;
		
        BuyBasket basket=new BuyBasket();
        basket.addProduct(b1);
        basket.addProduct(b2);
        basket.addProduct(a1);
        
        visitor=(Visitor)XMLUtil.getBean();
        
        visitor.setName("張三");
        	
        basket.accept(visitor);
	}
}

Customer.java

public class Customer extends Visitor
{
	public void visit(Apple apple)
	{
		System.out.println("顧客" + name + "選蘋果。");
	}
	
	public void visit(Book book)
	{
		System.out.println("顧客" + name + "買書。");
	}
}

Product.java

public interface Product
{
	void accept(Visitor visitor);
}

Saler.java

public class Saler extends Visitor
{
	public void visit(Apple apple)
	{
		System.out.println("收銀員" + name + "給蘋果過秤,然后計算其價格。");
	}
	
	public void visit(Book book)
	{
		System.out.println("收銀員" + name + "直接計算書的價格。");
	}
}

Visitor.java

public abstract class Visitor
{
	protected String name;
	
	public void setName(String name)
	{
		this.name=name;
	}
	
	public abstract void visit(Apple apple);
	
	public abstract void visit(Book book);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM