zoukankan      html  css  js  c++  java
  • 用python将项目中的所有代码(或txt)合并在一个文件中

    设计模式开卷考试给的例子代码都是一个类一个java,实在太恶心了,所以写了一个python脚本.

    import os
    fileansdir=r'C:Users	onyson_in_the_rainDesktop笔记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+='
    
    '
    
                res+='#### '+title
                res+='
    
    '
                res+='```
    '
                res+=content
                res+='
    ```
    '
    
                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	onyson_in_the_rainDesktop大三上学习设计模式设计模式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);
    }
    
  • 相关阅读:
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(3)
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(2)
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(1)
    python将项目文件打包发布的脚本(保留原来的项目结构)
    .net stream 转成 bytes[] 的实例和注意事项
    大区间素数筛选(POJ 2689)
    B. Duff in Love
    A. Duff and Meat
    NEFU_117素数个数的位数
    HDU_5504 GT and sequence
  • 原文地址:https://www.cnblogs.com/Tony100K/p/11732958.html
Copyright © 2011-2022 走看看