精华内容
下载资源
问答
  • 网上很多都是创建新的excel文件,然后写入内容,这里是把csv文件中的相关数据解析出来,然后把数据填写到原有的模板中。【每次会先复制模板生成新文件,新文件名包含当前日期,然后把数据填写到新文件中】 csv文件 ...

    Background

    • 网上很多都是创建新的excel文件,然后写入内容,这里是把csv文件中的相关数据解析出来,然后把数据填写到原有的模板中。【每次会先复制模板生成新文件,新文件名包含当前日期,然后把数据填写到新文件中】
    • python提供了很多修改excel的模块,包括xlsxWriter、xlrd&xlwt、openPyXL、Microsoft Excel API、Pandas等;其他的不作介绍,这里使用的是OpenPyXL模块。
    • OpenPyXL:较好的支持对xlsx文件的修改,功能比较强大,适用于需要处理xlsx文件,需要修改xlsx文件中的值,最后生成xlsx。openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件【不支持xls,但xls和xlsx之间转换容易】

    csv文件

    文件内容是从数据库中查出来的sql结果,共十组,第一组为模板中M列的数据(24小时单量),然后依次为10点,11点,12点,13点,14点,15点,16点,17点,18点。

     pro_com_code | create_sum | finish_sum 
    --------------+------------+------------
     11000000     |       2586 |       2096
     12000000     |        999 |        819
     13000000     |       3346 |       2642
     14000000     |       1007 |        671
     15000000     |       1165 |        861
     21000000     |       2452 |       2083
     21020000     |        714 |        602
     22000000     |        867 |        702
     23000000     |        935 |        762
     31000000     |       1367 |       1128
     32000000     |       6268 |       4945
     33000000     |       4960 |       3983
     33020000     |        689 |        579
     34000000     |       2032 |       1643
     35000000     |       1937 |       1434
     35020000     |        620 |        501
     36000000     |       2059 |       1597
     37000000     |       3255 |       2427
     37020000     |        753 |        645
     41000000     |       2141 |       1634
     42000000     |       2497 |       2052
     43000000     |       2353 |       1815
     44000000     |       7519 |       5874
     44030000     |       1609 |       1282
     45000000     |       1021 |        805
     46000000     |        333 |        248
     50000000     |       1419 |       1164
     51000000     |       3203 |       2509
     52000000     |       1655 |       1420
     53000000     |       1737 |       1077
     54000000     |        161 |         80
     61000000     |       1525 |       1175
     62000000     |        857 |        666
     63000000     |        341 |        294
     64000000     |        602 |        463
     65000000     |       2271 |       1945
    (36 rows)
    
     pro_com_code | create_sum | finish_sum 
    --------------+------------+------------
     11000000     |        233 |        158
     12000000     |         53 |         38
     13000000     |        288 |        209
     14000000     |         92 |         46
     15000000     |        103 |         65
     21000000     |        227 |        178
     21020000     |         46 |         40
     ........后面的省略
    

    模板文件

    在这里插入图片描述

    在这里插入图片描述

    源码

    import csv
    import shutil
    from openpyxl import load_workbook
    from time import strftime, localtime
    
    
    # 去除字符串中空格、Tab及回车的方法
    def strip_str(str_with_blank):
        return str_with_blank.replace(" ", "").replace("\t", "").strip()
    
    
    # 读取原始数据文件
    csv_file = open('F:/wlf/sql_output.csv', 'r')
    csv_data = csv.reader(csv_file)
    rows_raw = [row for row in csv_data]
    rows_deal = []
    
    # 去掉无用行和行里的空白
    for i in range(len(rows_raw)):
        rows = rows_raw[i]
        if len(rows) != 0:
            row_line = rows[0]
            if '0000' in row_line:
                rows_deal.append(strip_str(row_line))
    
    
    # 写入顺序[24小时单量,10点,11点,12点,13点,14点,15点,16点,17点,18点]
    # 写入模板列的顺序[M, D, E, F, G, H, I, J, K, L]
    cols_order_template = ['M', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']
    
    # 原模板文件
    file_origin = 'F:/wlf/平台监控数据模板.xlsx'
    # 在相同路径下复制模板文件,生成的新文件名带日期,例如:平台监控数据-2020-10-23.xlsx
    now_date = strftime("%Y-%m-%d", localtime())
    file_now = 'F:/wlf/平台监控数据-%s.xlsx' % now_date
    shutil.copy(file_origin, file_now)
    
    # 获取模板 excel 的操作对象
    wb = load_workbook(filename=file_now)
    # 根据 Sheet1 这个名字来获取 Sheet1
    sheet1 = wb['Sheet1']
    
    # 这层循环遍历所有要写入数据的列
    for i in range(len(cols_order_template)):
    
        # 这层循环取出每列对应的数值
        data_col = []
        for j in range(i * 36, 35 * (i + 1) + i + 1):
            create_sum = rows_deal[j].split('|')[1]
            finish_sum = rows_deal[j].split('|')[2]
            data_col.append(create_sum)
            data_col.append(finish_sum)
    
        # 当 i 为 0 时,取出 M 列对应的数据,计算所有分公司 24 小时合计数量
        create_sum_all = []
        finish_sum_all = []
        if i == 0:
            # 奇数行为发起数量
            create_sum_all = data_col[::2]
            # 偶数行为完成数量
            finish_sum_all = data_col[1::2]
            # 计算总数
            total_create = 0
            total_finish = 0
            for ii in range(0, len(create_sum_all)):
                total_create += int(create_sum_all[ii])
                total_finish += int(finish_sum_all[ii])
            # 写入计算结果 D75 和 D76
            sheet1['D75'] = total_create
            sheet1['D76'] = total_finish
    
        # 这层循环写入每列的值【每个省份的发起量和完成量】 每一列都是从第 3 行到第 74 行
        for k in range(len(data_col)):
            index_cell = k + 3
            col_word = cols_order_template[i]
            cell_code = col_word + str(index_cell)
            sheet1[cell_code] = data_col[k]
    
    # 修改后保存 excel
    wb.save(file_now)
    print('success')
    
    展开全文
  • 在使用MyBatis Generator生成代码的过程中,曾经遇到一个坑,每次生成mapper.xml的时候并不是直接覆盖原文件,而是在原文件中追加了新的内容,导致运行项目出错,本文主要讲解如何解决这个问题。 问题重现 ...

    MyBatis Generator使用过程中踩过的一个坑

    在使用MyBatis Generator生成代码的过程中,曾经遇到一个坑,每次生成mapper.xml的时候并不是直接覆盖原文件,而是在原文件中追加了新的内容,导致运行项目出错,本文主要讲解如何解决这个问题。

    问题重现

     

     

    直接运行MallTinyApplication的main函数

    发现正常运行,启动成功! 

    运行代码生成器

    运行com.macro.mall.tiny.mbg.Generator的main方法

    重新启动MallTinyApplication的main函数

    发现已经无法正常运行,其中有这么一行关键性的错误:

    nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.
    The XML location is 'file [D:\developer\github\mall-learning\mall-tiny-02\target\classes\com\macro\mall\tiny\mbg\mapper\PmsBrandMapper.xml]'.
    Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.macro.mall.tiny.mbg.mapper.PmsBrandMapper.BaseResultMapCopy to clipboardErrorCopied

    表明了PmsBrandMapper.xml文件解析错误,BaseResultMap重复定义。

    查看PmsBrandMapper.xml文件

    从中可以发现MyBatis Generator生成的mapper.xml文件信息是直接追加在原来的文件上的,并不是直接覆盖,导致了这个错误。 

    问题解决

    以前一直以为是MyBatis Generator生成的问题,直接删除mapper.xml所在文件夹,重新生成就好了,现在提供一种MyBatis Generator官方提供的解决方法。

    升级MyBatis Generator的版本

    MyBatis Generator 在1.3.7版本提供了解决方案,我们目前使用的版本为1.3.3。

    <!-- MyBatis 生成器 -->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.7</version>
    </dependency>Copy to clipboardErrorCopied

    在generatorConfig.xml文件中添加覆盖mapper.xml的插件

    <!--生成mapper.xml时覆盖原文件-->
    <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />Copy to clipboardErrorCopied

    重新运行代码生成器

    发现PmsBrandMapper.xml生成已经正常,应用也可以正常运行了。 

     

    展开全文
  • 如果之前的项目东西很多,不方便新建移植,那我们可以在原项目给它配置pom.xml,在原基础指定 相关路径,也可以把项目改成maven项目。 步骤如下: 添加pom.xml 首先准备好一份包括了自己包


    我们上一篇文章已经写了 新建框架的移植方法

    将原有的MyEclipse中的项目转成maven项目----新建一个maven项目把原项目按照新项目的框架移植过去



    如果之前的项目东西很多,不方便新建移植,那我们可以在原项目上给它配置pom.xml,在原基础上指定 相关路径,也可以把项目改成maven项目。


    步骤如下:

    添加pom.xml

    首先准备好一份包括了自己包的pom.xml或者先用一份基础的,再相应添加需要的包。

    我这里直接用下面链接中的 指定路径完整版,这个版本包含了spring struts mongodb   hadoop quartz

    可用的ss-mongo框架的pom.xml及相关的web.xml等


    我在我要修改的项目中新建一个pom.xml然后把 指定路径完整版的内容完全粘贴进去如下:








    复制粘贴进去后我们开始进行一些相应的修改和路径的指定



    修改项目名以及路径指定






    详见最后 参考pom.xml



    添加项目的maven插件和icon标识

    这个时候项目在myeclipse中是不能识别成maven项目的

    需要修改.classpath以及.project文件才能被识别

    修改方法 如下链接

    maven项目在myeclipse中不出现Maven Dependencies 和maven标识的解决方法




    删除以前的library





    添加缺少的包

    这时候相当于已经启用了maven,但是我们引用的包可能不全,这时候缺少包或者包版本不对的 class中就会报错,相应的进行添加包以及调整包的版本即可






    参考pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>athena</groupId>
        <artifactId>athena</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        <build>
            <sourceDirectory>src/</sourceDirectory>
            <resources>
                <resource>
                    <directory>src</directory>
                    <excludes>
                        <exclude>**/*.java</exclude>
                    </excludes>
                </resource>
                <resource>
                    <directory>resource</directory>
                    <excludes>
                        <exclude>**/*.java</exclude>
                    </excludes>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.5</version>
                    <configuration>
                        <webXml>./WebRoot/WEB-INF/web.xml</webXml>
                        <warSourceDirectory>WebRoot</warSourceDirectory>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.17</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>findbugs-maven-plugin</artifactId>
                    <version>2.5.5</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>2.13</version>
                    <configuration>
                        <configLocation>resource/checkstyle_checks.xml</configLocation>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-pmd-plugin</artifactId>
                    <version>3.2</version>
                </plugin>
            </plugins>
        </build>
        <dependencies>
        <!--     <dependency>
                <groupId>jdk.tools</groupId>
                <artifactId>jdk.tools</artifactId>
                <version>1.6</version>
                <scope>system</scope>
                <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
            </dependency> -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>4.2.4</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.mrunit</groupId>
                <artifactId>mrunit</artifactId>
                <version>1.1.0</version>
                <classifier>hadoop2</classifier>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>2.4.1</version>
                <exclusions>
                	<exclusion>
                		<artifactId>servlet-api</artifactId>
                		<groupId>javax.servlet</groupId>
                	</exclusion>
                	<exclusion>
                		<artifactId>jsp-api</artifactId>
                		<groupId>javax.servlet.jsp</groupId>
                	</exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs</artifactId>
                <version>2.4.1</version>
                <exclusions>
                	<exclusion>
                		<artifactId>servlet-api</artifactId>
                		<groupId>javax.servlet</groupId>
                	</exclusion>
                	<exclusion>
                		<artifactId>jsp-api</artifactId>
                		<groupId>javax.servlet.jsp</groupId>
                	</exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongo-java-driver</artifactId>
                <version>2.12.3</version>
            </dependency>
            <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongo-hadoop-core</artifactId>
                <version>1.3.0</version>
                <exclusions>
                    <exclusion>
                        <groupId>jdk.tools</groupId>
                        <artifactId>jdk.tools</artifactId>
                    </exclusion>
                    <exclusion>
                    	<artifactId>servlet-api</artifactId>
                    	<groupId>javax.servlet</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongo-hadoop-pig</artifactId>
                <version>1.3.0</version>
                <exclusions>
                	<exclusion>
                		<artifactId>jsp-api-2.1</artifactId>
                		<groupId>org.mortbay.jetty</groupId>
                	</exclusion>
                	<exclusion>
                		<artifactId>jsp-2.1</artifactId>
                		<groupId>org.mortbay.jetty</groupId>
                	</exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongo-hadoop-hive</artifactId>
                <version>1.3.0</version>
                <exclusions>
                	<exclusion>
                		<artifactId>servlet-api</artifactId>
                		<groupId>org.mortbay.jetty</groupId>
                	</exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.9</version>
            </dependency>
            <dependency>
                <groupId>net.sourceforge.jexcelapi</groupId>
                <artifactId>jxl</artifactId>
                <version>2.5.7</version>
            </dependency>
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>20090211</version>
            </dependency>
            <dependency>
                <groupId>net.sf.json-lib</groupId>
                <artifactId>json-lib</artifactId>
                <version>2.3</version>
                <classifier>jdk15</classifier>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-mongodb</artifactId>
                <version>1.2.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.jsoup</groupId>
                <artifactId>jsoup</artifactId>
                <version>1.7.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.axis2</groupId>
                <artifactId>axis2-adb</artifactId>
                <version>1.6.2</version>
                <exclusions>
                	<exclusion>
                		<artifactId>servlet-api</artifactId>
                		<groupId>javax.servlet</groupId>
                	</exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>net.sourceforge.htmlcleaner</groupId>
                <artifactId>htmlcleaner</artifactId>
                <version>2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-client</artifactId>
                <version>0.98.0-hadoop2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-common</artifactId>
                <version>0.98.0-hadoop2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-server</artifactId>
                <version>0.98.0-hadoop2</version>
                <exclusions>
                	<exclusion>
                		<artifactId>servlet-api</artifactId>
                		<groupId>javax.servlet</groupId>
                	</exclusion>
                	<exclusion>
                		<artifactId>jsp-api</artifactId>
                		<groupId>javax.servlet.jsp</groupId>
                	</exclusion>
                	<exclusion>
                		<artifactId>jsp-api-2.1</artifactId>
                		<groupId>org.mortbay.jetty</groupId>
                	</exclusion>
                	<exclusion>
                		<artifactId>jsp-2.1</artifactId>
                		<groupId>org.mortbay.jetty</groupId>
                	</exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.struts.xwork</groupId>
                <artifactId>xwork-core</artifactId>
                <version>2.3.15.1</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.0.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>com.reallyinfo</groupId>
                <artifactId>aether</artifactId>
                <version>0.1</version>
            </dependency>
            <dependency>
                <groupId>com.reallyinfo</groupId>
                <artifactId>ezmorph</artifactId>
                <version>0.1</version>
            </dependency>
            <dependency>
                <groupId>com.reallyinfo</groupId>
                <artifactId>themis</artifactId>
                <version>0.1</version>
            </dependency>
            <dependency>
            	<groupId>javax.servlet</groupId>
            	<artifactId>servlet-api</artifactId>
            	<version>2.5</version>
            	<scope>provided</scope>
            </dependency>
            <dependency>
            	<groupId>javax.servlet.jsp</groupId>
            	<artifactId>jsp-api</artifactId>
            	<version>2.1</version>
            	<scope>provided</scope>
            </dependency>
            <dependency>
            	<groupId>org.mortbay.jetty</groupId>
            	<artifactId>servlet-api-2.5</artifactId>
            	<version>6.1.14</version>
            	<scope>provided</scope>
            </dependency>
            <dependency>
            	<groupId>org.mortbay.jetty</groupId>
            	<artifactId>jsp-2.1</artifactId>
            	<version>6.1.14</version>
            	<scope>provided</scope>
            </dependency>
            <dependency>
            	<groupId>org.mortbay.jetty</groupId>
            	<artifactId>jsp-api-2.1</artifactId>
            	<version>6.1.14</version>
            	<scope>provided</scope>
            </dependency>
            <dependency>
            	<groupId>org.springframework</groupId>
            	<artifactId>spring-web</artifactId>
            	<version>4.0.0.RELEASE</version>
            </dependency>
            <dependency>
            	<groupId>org.quartz-scheduler</groupId>
            	<artifactId>quartz</artifactId>
            	<version>2.2.1</version>
            </dependency>
            <dependency>
            	<groupId>org.slf4j</groupId>
            	<artifactId>slf4j-api</artifactId>
            	<version>1.6.6</version>
            </dependency>
            <dependency>
            	<groupId>org.slf4j</groupId>
            	<artifactId>slf4j-log4j12</artifactId>
            	<version>1.7.5</version>
            </dependency>
            <dependency>
            	<groupId>log4j</groupId>
            	<artifactId>log4j</artifactId>
            	<version>1.2.17</version>
            </dependency>
            <dependency>
            	<groupId>org.quartz-scheduler</groupId>
            	<artifactId>quartz-jobs</artifactId>
            	<version>2.2.1</version>
            </dependency> 
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>4.0.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>4.0.0.RELEASE</version>
            </dependency>    
             <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-core</artifactId>
                <version>2.3.16.3</version>
                <scope>runtime</scope>
            </dependency>     
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-json-plugin</artifactId>
                <version>2.3.16.3</version>
                <scope>runtime</scope>
            </dependency>
             <dependency>
                <groupId>org.apache.struts.xwork</groupId>
                <artifactId>xwork-core</artifactId>
                <version>2.3.16</version>
            </dependency>
            	<dependency>
    			<groupId>org.apache.struts</groupId>
    			<artifactId>struts2-spring-plugin</artifactId>
    			<version>2.3.15.1</version>
    			 <exclusions>  
                    <exclusion>  
                       <groupId>org.springframework</groupId>
    			<artifactId>spring-beans</artifactId>
                    </exclusion>  
                     <exclusion>  
                      <groupId>org.springframework</groupId>
    			<artifactId>spring-web</artifactId> 
                    </exclusion>  
                     <exclusion>  
                     <groupId>org.springframework</groupId>
    			<artifactId>spring-core</artifactId>
                    </exclusion>             
                     <exclusion>  
                     <groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId> 
                    </exclusion>            
                </exclusions>  
    		</dependency>
            	<dependency>
            		<groupId>org.apache.httpcomponents</groupId>
            		<artifactId>httpclient</artifactId>
            		<version>4.2.5</version>
            	</dependency>
            	<dependency>
            		<groupId>tomcat</groupId>
            		<artifactId>jasper-compiler</artifactId>
            		<version>5.5.23</version>
            		<scope>provided</scope>
            	</dependency>
            	<dependency>
            		<groupId>tomcat</groupId>
            		<artifactId>jasper-runtime</artifactId>
            		<version>5.5.23</version>
            		<scope>provided</scope>
            	</dependency>
        </dependencies>
        <reporting>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.17</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>findbugs-maven-plugin</artifactId>
                    <version>2.5.5</version>
                    <configuration>
                        <findbugsXmlOutput>true</findbugsXmlOutput>
                        <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
                        <xmlOutput>true</xmlOutput>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>2.13</version>
                    <configuration>
                        <configLocation>resource/checkstyle_checks.xml</configLocation>
                    </configuration>
                    <reportSets>
                        <reportSet>
                            <reports>
                                <report>checkstyle</report>
                            </reports>
                        </reportSet>
                    </reportSets>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-pmd-plugin</artifactId>
                    <version>3.2</version>
                </plugin>
            </plugins>
        </reporting>
        <packaging>war</packaging>
    </project>


    展开全文
  • 此编译器是在编译原理书本的附录TINY经过老师要求修改的,包括将关键字增加到18个,添加识别WHILE循环等各个语句或表达式,修改了编译器所需的各个部分,...编译文件时注意修改MAIN函数的文件读取路径,暂时就这么多吧
  • 原理修改js和css文件通过对js,css文件内容进行hash运算,生成一个文件的唯一hash字符串(如果文件修改则hash号会发生变化)替换html中的js,css文件名,生成一个带版本号的文件名 方案现在网上的方案都是生成一个新的...

    原理

    修改js和css文件
    
    通过对js,css文件内容进行hash运算,生成一个文件的唯一hash字符串(如果文件修改则hash号会发生变化)
    
    替换html中的js,css文件名,生成一个带版本号的文件名
    

    方案

    现在网上的方案都是生成一个新的dist目录,里面包含了要发布的html,js,css等文件。但是在实际的公司的项目中,会有情况不能生成新的HTML进行发布,需要在原来的HTML文件上进行js ,css版本的替换. 这里分享下我在实际项目中通过改动插件然后在原目录结构下进行版本的控制方案。

    原html文件代码

    <link rel="stylesheet" href="../css/default.css">
    <script src="../js/app.js"></script>

    预期效果:在原目录结构下html文件代码

    <link rel="stylesheet" href="../css/default.css?v=5a636d79c4">
    <script src="../js/app.js?v=3a0d844594"></script>

    1:安装gulp和gulp插件
    执行:

    npm install --save-dev gulp
    npm install --save-dev gulp-rev
    npm install --save-dev gulp-rev-collector
    npm install --save-dev run-sequence

    2:编写gulpfile.js

    
    
    //引入gulp和gulp插件
    var gulp = require('gulp'),
        runSequence = require('run-sequence'),
        rev = require('gulp-rev'),
        revCollector = require('gulp-rev-collector');
    
    //定义css、js源文件路径
    var cssSrc = 'css/*.css',
        jsSrc = 'js/*.js';
    
    
    //CSS生成文件hash编码并生成 rev-manifest.json文件名对照映射
    gulp.task('revCss', function(){
        return gulp.src(cssSrc)
            .pipe(rev())
            .pipe(rev.manifest())
            .pipe(gulp.dest('rev/css'));
    });
    
    
    //js生成文件hash编码并生成 rev-manifest.json文件名对照映射
    gulp.task('revJs', function(){
        return gulp.src(jsSrc)
            .pipe(rev())
            .pipe(rev.manifest())
            .pipe(gulp.dest('rev/js'));
    });
    
    
    //Html替换css、js文件版本
    gulp.task('revHtml', function () {
        return gulp.src(['rev/**/*.json', 'View/*.html'])
            .pipe(revCollector())
            .pipe(gulp.dest('View'));
    });
    
    
    //开发构建
    gulp.task('dev', function (done) {
        condition = false;
        runSequence(
            ['revCss'],
            ['revJs'],
            ['revHtml'],
            done);
    });
    
    
    gulp.task('default', ['dev']);
    

    执行gulp命令后的效果

    //rev目录下生成了manifest.json对应文件
    {
      "default.css": "default-803a7fe4ae.css"
    }
    
    
    <link rel="stylesheet" href="../css/default-803a7fe4ae.css">
    <script src="../js/app-3a0d844594.js"></script>
    

    很显然这不是我们需要的效果

    3.更改gulp-rev和gulp-rev-collector

    打开node_modules\gulp-rev\index.js
    第144行 manifest[originalFile] = revisionedFile;
    更新为: manifest[originalFile] = originalFile + '?v=' + file.revHash;
    打开nodemodules\gulp-rev\nodemodules\rev-path\index.js
    10return filename + '-' + hash + ext;
    更新为: return filename + ext;
    打开node_modules\gulp-rev-collector\index.js
    31if ( !_.isString(json[key]) || path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' ) !==  path.basename(key) ) {
    更新为: if ( !_.isString(json[key]) || path.basename(json[key]).split('?')[0] !== path.basename(key) ) {
    打开node_modules\gulp-rev-collector\index.js
    第107行 regexp: new RegExp( '([\/\\\\\'"])' + pattern, 'g' ),
    更新为: regexp: new RegExp( '([\/\\\\\'"])' + pattern+'(\\?v=\\w{10})?', 'g' ),

    最终结果
    经过上面的四步修改之后现在你不管执行多少遍gulp命令,得到的html效果都是:

    <link rel="stylesheet" href="../css/default.css?v=5a636d79c4">
    <script src="../js/app.js?v=3a0d844594"></script>

    文章出处

    展开全文
  • C语言中的写文件操作是通过文件句柄来向对应的文件中写入内容的,如果程序有访问文件句柄的权限,那么不管文件放在哪个目录下,都能够成功写入。在写文件的过程中,如果将文件删除,或者是放到了程序无权访问的目录...
  • 网上的大多数答案也是,读入,写入的过程,总结如下python修改文件(fileinput) 链接...感觉不是太好,看到这个fileinput的库,发现大同小异,不过有一点就是可以在原文件上修改,不...
  • python修改文件(fileinput)

    千次阅读 2016-12-12 15:43:37
    感觉不是太好,看到这个fileinput的库,发现大同小异,不过有一点就是可以在原文件上修改,不用新开文件。举个简单的例子: 我有json文件1.json是如下格式:/* 1 */ { "_id" : "18372776", "city" : "广州", ...
  • 如果用循环给文件命名,则文件名就会...可以把原来的文件重命名,在原文件名前面加上0,例如00001,00002,…,这样就可以按顺序遍历了。代码如下 import os path =r'E:\0105\txt' for file in os.listdir(path): name
  • 后来想到,该文件就是一个文本文件,记录了项目的配置信息,里面包含编译文件生成目录,直接修改即可呀。 所以,我用 vscode 打开这个 Qt 工程,全局搜索之前工程所在的路径,直接替换成新的工程目录,重启即可。 ...
  • 命令行签名apk文件

    2020-12-01 17:19:28
    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 这里是签名文件的路径 --keypass 签名文件密码 --storepass 签名文件密码 待签名.apk --signedjar 签名后文件(不指定则在原文件上修改).apk ...
  • # chkconfig: 2345 65 37 // 在原数字加1,与mysqld分开 basedir=/usr/local/mariadb datadir=/usr/local/mariadb/data lock_file_path="$lockdir/mariadb" extra_args="-c $basedir/my.cnf" // 改成-c即配置文件,...
  • 在发布项目到线上时,很多时候需要修改文件的权限,如果是使用git版本管理软件来发布的话,那么下次更新线上文件的时候就会提示文件冲突。明明文件没有修改,为什么会冲突呢?原来git把文件权限也算作文件差异的一...
  • Qt修改文件内容

    万次阅读 多人点赞 2016-06-28 14:37:53
    此时只能修改系统中包含网卡信息的文件,下图红框中所示就是文件中的网卡信息。 那么如何修改这四行呢,我的做法是先打开该文本文件,然后读出全部文本内容,根据换行符“\n”将文本内容分割为字符串列表,当列表...
  • 例如: 将分数表的所有分数+10 update grade set score=score+#{score} 并没有起作用 分数值没有+10
  • python修改文件(fileinput) 链接 https://blog.csdn.net/u013398398/article/details/53583596 上网查了好多方法都是将文件一行一行都进来,然后新开一个文件指针,将文件再一行行写进新文件里。  感觉不是太好...
  • 最近在做 excel导入数据库的功能,步骤如下: 1. 首先用FileUpload上传文件 ...在返回结果我想把未导入的数据在原文件中标示,比如在未导入的那行数据后面加一个 ”导入失败“ 请问有办法实现吗?
  • Matlab 文件重命名

    万次阅读 2018-05-15 10:58:09
    文件重命名有两种方式在原文件上改名创建文件副本,以新名字命名1.MATLAB中并未提供在原文件上改名的函数,一般采用调用命令行的方式,如:eval(['!rename',',要重命名的文件路径,' ',更改后的文件名'])。上述代码中...
  • 因为需要处理数据文件,涉及到数据的重新排列(主要是换顺序),在网上找了找相关的资料,没见到系统一点的,所以在这里整理和测试一下。 已经知道的问题有以下一些: 问题一:请教Matlab数据替换的问题 ...
  • 在PE文件上添加执行代码

    千次阅读 2014-01-29 17:14:20
    1,将添加的代码写到目标PE文件中,可以把这个代码插入原代码所处的的section的空隙中,也可以通过添加一个新的section附在原文件的尾部 2,PE文件原来的入口地址必须被保存在添加的代码中,这样,这段代码执行完...
  • 或者将exe文件在原文件夹下直接更改名字,图标显示也已经改了。如下图所示: 分析: 这是WINDOWS系统图标缓存造成的,对图标使用了缓存的方法来加快显示速度;所以,在相同路径下相同名字和格式的文件,就会采...
  • 增加控制器方法除了要在原文件位置增加controller和model之外,还需要在以下配置文件中填写指向信息. 1.路由规则文件2.js通信文件 D:\phpstudy_pro\WWW\ec\appserver\app\Http\routes.php D:\phpstudy_pro\...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,854
精华内容 13,141
关键字:

如何在原文件上修改