-
2020-12-06 11:19:10
有一个txt文本如下:
151 151 1234561 156421
214156 1523132 031320
现希望将两行合并为一行,并将中间所有的空格都去掉:
(python编程第十章)
代码如下:
path = r'C:\Users\xxx\Desktop\test.txt'#文本存放的路径
with open(path) as file:
lines = file.readlines()#读取每一行
a = ''#空字符(中间不加空格)
for line in lines:
a += line.strip()#strip()是去掉每行末尾的换行符\n 1
c = a.split()#将a分割成每个字符串 2
b = ''.join(c)#将c的每个字符不以任何符号直接连接 3
print(a)
print(b)
#打印a,b观察不同
结果如下:
151 151 1234561 156421214156 1523132 031320
15115112345611564212141561523132031320
详细说明:
1,lines直接打印出来的结果如下:
>>> lines
['151 151 1234561 156421 \n', ' 214156 1523132 031320\n']
加strip()之后(去掉\n),即a的结果:
'151 151 1234561 156421214156 1523132 031320'
2.a.split()从空格那儿分割成每个字符串
['151', '151', '1234561', '156421214156', '1523132', '031320']
3.”.join(c)直接将每个字符串连接
以上这篇python 实现将txt文件多行合并为一行并将中间的空格去掉方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
更多相关内容 -
用C语言将中文文本和英文文本合并为一段中文一段英文(翻译排版)
2021-03-19 10:54:23将每一段段首设置为两个空格(包括标题)1.将Word文档复制到文本文档中:2.使用替换3.将完成好的文本复制粘贴到编译器中(Dev c++) 前言 网上下载的所谓中英对照文本往往都是中英分开的两个文本: ![在这里插入...文章目录
前言
网上下载的所谓中英对照文本往往都是中英分开的两个文本:
很鸡肋,所以在这里讲一下如何将其设置为一段中文一段英文。
一.首先要对网上下载的文件进行必要的修改
注意
下载的资源可能存在中文段数和英文段数不一致的情况,这会直接影响输出结果,所以还是建议大家将文章分为多个部分排版,然后整合。
1.将段与段之间的空行删除
先将全文赋值粘贴到Word文档中,全选文档,然后按Ctrl+H弹出替换框,输入如图所示的字符(一个^p表示一个换行符,它的意思就是将连续两个换行符替换为一个)
然后选择全部替换,多点击几次全部替换,以免有漏网之鱼。
替换完成后:
可以看到,段之间的空行消失了。2.将每一段段首设置为两个空格(包括标题)
(1)将Word文档复制到文本文档中
(2)使用替换
文本编辑器的替换很简单很人性:
先复制每段前面的空格 ,然后全选,再点击替换,将复制的空格粘贴,输入替换内容为英文输入法下的两个空格(英文空格使用的是ANSIC码,会方便我们后面的操作)。将段首解决后解决标题,同样的复制粘贴加替换。
完成后:
3.将完成好的文本复制粘贴到编译器中(Dev c++)
如图:
这一步的目的是将Unicode编码转换为ANSIC编码(后面使用文件函数时会方便很多ANSIC)。
保存这串“代码”,以后的操作都是对这个保存的“代码”进行的。
英文文档也按上面的方法操作,最终得到两个拓展名为.cpp的文件,我将其分别命名为ch.cpp和en.cpp。二.程序设计
1.基本思路
以英文文档为例:文章的每一段都以两个空格开始,所以可以存储每一段段首和段尾的位置(距离文章第一个字符的字节数),在输出时,按照每段从段首到段尾输出。
2.代码实现
(1)数据存储
将每段段首和段尾的位置存储在结构体中:
typedef struct passe{ long start; long end; struct passe *next; }PassE; typedef struct passc{ long start; long end; struct passc *next; }PassC;
(2)使用链表存储所有段落的开始和结束位置
以英文为例:
for(i=0;;i++) { fseek(fp_e,i,SEEK_SET); ch1=getc(fp_e); ch2=getc(fp_e); ch3=getc(fp_e); if(ch1==EOF||ch2==EOF||ch3==EOF) { last_e=(PassE*)malloc(sizeof(PassE)); current_e->next =last_e; last_e->next=NULL; last_e->start =current_e->end; last_e->end =ftell(fp_e); break; } if(ch1==' '&&ch2==' '&&ch3!=' '&&i!=0) { end=i-1; current_e=(PassE*)malloc(sizeof(PassE)); if(head_e==NULL) { head_e=current_e; head_e->start=0; } else { previous_e->next=current_e; current_e->start =previous_e->end ; } previous_e=current_e; current_e->end =end; current_e->next =NULL; } }
(3)输出文档
由于可能存在中文段数和英文段数不一致的情况,故在输出时需要判断中文和英文是否已经输出完毕,加入其中一个已经输出完毕,就结束关于它的操作(current_c->next=NULL,出现current_c=current_c->next,并且试图访问其中的数据的行为时,程序会异常退出)
while(true) { if(argu_e) { for(i=current_e->start ;i<=current_e->end ;i++) { fseek(fp_e,i,SEEK_SET); ch=getc(fp_e); fprintf(fp_immi,"%c",ch); } } if(argu_c) { for(i=current_c->start ;i<=current_c->end;i++) { fseek(fp_c,i,SEEK_SET); ch=getc(fp_c); fprintf(fp_immi,"%c",ch); } } if(current_c->next!=NULL)//此时current_c已经输出过了 current_c=current_c->next ; else { argu_c=0; } if(current_e->next!=NULL) current_e=current_e->next ; else { argu_e=0; } if(argu_c==0&&argu_e==0) break; }
3.完整代码
#include<stdio.h> #include<stdlib.h> typedef struct passe{ long start; long end; struct passe *next; }PassE; typedef struct passc{ long start; long end; struct passc *next; }PassC; int main(void) { PassE *head_e=NULL,*current_e,*previous_e,*last_e; PassC *head_c=NULL,*current_c,*previous_c,*last_c; FILE *fp_e,*fp_c,*fp_immi; fp_e=fopen("en.cpp","r+"); fp_c=fopen("ch.cpp","r+"); fp_immi=fopen("immi.txt","r+"); //获取英文字符 char ch1,ch2,ch3; long end,i; for(i=0;;i++) { fseek(fp_e,i,SEEK_SET); ch1=getc(fp_e); ch2=getc(fp_e); ch3=getc(fp_e); if(ch1==EOF||ch2==EOF||ch3==EOF) { last_e=(PassE*)malloc(sizeof(PassE)); current_e->next =last_e; last_e->next=NULL; last_e->start =current_e->end; last_e->end =ftell(fp_e); break; } if(ch1==' '&&ch2==' '&&ch3!=' '&&i!=0) { end=i-1; current_e=(PassE*)malloc(sizeof(PassE)); if(head_e==NULL) { head_e=current_e; head_e->start=0; } else { previous_e->next=current_e; current_e->start =previous_e->end ; } previous_e=current_e; current_e->end =end; current_e->next =NULL; } } for(i=0;;i++) { fseek(fp_c,i,SEEK_SET); ch1=getc(fp_c); ch2=getc(fp_c); ch3=getc(fp_c); if(ch1==EOF||ch2==EOF||ch3==EOF) { last_c=(PassC*)malloc(sizeof(PassC)); current_c->next =last_c; last_c->next=NULL; last_c->start =current_c->end; last_c->end =ftell(fp_c); break; } if(ch1==' '&&ch2==' '&&ch3!=' '&&i!=0) { end=i-1; current_c=(PassC*)malloc(sizeof(PassC)); if(head_c==NULL) { head_c=current_c; head_c->start=0; } else { previous_c->next=current_c; current_c->start =previous_c->end ; } previous_c=current_c; current_c->end =end; current_c->next =NULL; } } char ch; current_e=head_e; current_c=head_c; int argu_c=1,argu_e=1; while(true) { if(argu_e) { for(i=current_e->start ;i<=current_e->end ;i++) { fseek(fp_e,i,SEEK_SET); ch=getc(fp_e); fprintf(fp_immi,"%c",ch); } } if(argu_c) { for(i=current_c->start ;i<=current_c->end;i++) { fseek(fp_c,i,SEEK_SET); ch=getc(fp_c); fprintf(fp_immi,"%c",ch); } } if(current_c->next!=NULL)//此时current_c已经输出过了 current_c=current_c->next ; else { argu_c=0; } if(current_e->next!=NULL) current_e=current_e->next ; else { argu_e=0; } if(argu_c==0&&argu_e==0) break; } }
4.效果
前一部分:
结尾:
可以看到出现了对不上号的情况,所以在运行代码前尽量确保中英文每一个段落可以对应的上(对文档的每一章单独整理,处理好格式,它的工作量不大)。 -
elasticsearch搜索引擎-关于段合并思考
2022-02-02 20:35:07段合并对于es来说是一件至关重要的事情。因为段是es发生检索的最小执行单元。一个索引的数据是由分片组成的,分片是一个lucene实例,而分片又是由段组成的。因此,一个检索任务,最终是在每一个段中执行完检索,最后...段合并对于es来说是一件至关重要的事情。因为段是es发生检索的最小执行单元。一个索引的数据是由分片组成的,分片是一个lucene实例,而分片又是由段组成的。因此,一个检索任务,最终是在每一个段中执行完检索,最后合并结果的。
因此了解段就显得至关重要。段的优劣,直接决定了检索的性能。常用es的,大家可能会遇到一个情况,就是es用着用着越来越慢了。段合并问题是一个重要的影响因素。
通过这篇文章,我们将深入的了解段合并流程,段合并过程,段合并策略,已经段合并问题。我参看的文档原文为:
- LogMergePolicy-html (通过这篇文章,我们将会学到段合并的一些基础知识。了解到段合并的过程。其中LogMergePolocy 是lucene 最早版本的合并策略)
- TieredMergePolicy-html (将会学到 lucene默认的合并策略,已经为什么要有第二中策略,来替换更新前边的策略)
以上两篇文章,实际上对应的是lucene的两种段合并策略。
带着问题读文章
我是在寻找es索引为什么在使用一段时间之后变慢的原因。 所以研究了段合并的问题。段合并只是一个点,但是至关重要。
问题列表:
- 为什么需要段合并。
- 为什么TieredMergePolicy 合并策略,会成为默认的段合并策略,替换了LogMergePolicy
- 什么时候发生段合并。
- 段合并的过程究竟是怎么样的。
- 我认为本片文章最重要的问题:什么时候就不再进行段合并(段合并的条件是什么)已经不进行段合并,会有什么致命的问题?这个问题也是我最初问题的答案。
问题一:为什么需要段合并
通过读上边的两篇文章,我基本上已经能够知道段合并的细节问题。其实段合并有两个目的
- 想要降低段的个数。把小段合并成大段,合并成大段,利于检索。
- 段合并其实上想要调整段的大小,尽可能的使段均匀。
问题二:为什么TieredMergePolicy 合并策略,会成为默认的段合并策略,替换了LogMergePolicy
这个问题,从文章中也能找到答案。我们先看两个合并策略上的差别:
- LogMergePolicy总是合并相邻的段文件,合并相邻的段文件(Adjacent Segment)描述的是对于IndexWriter提供的段集,LogMergePolicy会选取连续的部分(或全部)段集区间来生成一个待合并段集
- TieredMergePolicy中会先对IndexWriter提供的段集进行排序,然后在排序后的段集中选取部分(可能不连续)段来生成一个待合并段集,即非相邻的段文件(Non-adjacent Segment)
此外,这个问题也要和第一个问题关联起来,段合并的目的。通过了解LogMergePolicy策略我们知道,它是把相邻的段进行合并。但是这样并不能达到段合并的第二个目的(使段均匀)
在了解TieredMergePolicy以后,我们可以知道,它使用了更多的算法来优化段合并的过程。它对段进行的打分(了解文章二中的打分算法规则即可),并做了排序,然后有限合并小段。显然合并小段花费更少的资源,且会带来更好合并效果。
问题三:什么时候发生段合并
某次提交(commit)或者刷新(flush)的所有索引文件属于一个新的段(Segment),所以也可以称为段合并(Segment Merge)。当IndexWriter索引中的数据有任意修改动作,它会调用findMerges(...)方法通过某个合并策略(MergePolicy)来找出需要合并的段集,如果需要合并,那么合并策略会返回一个oneMerge的集合,oneMerge的个数描述了IndexWriter需要执行合并的次数,单个oneMerge中包含了需要合并为一个新段(New Segment)的段集合。
另外段合并的条件是(TieredMergePolicy 默认段合并策略下):
- 默认的限制段合并的大小为5G,也就是说当一个段的大小大于 2.5G就不再发生段合并,段的大小需要小于 2.5G,这个是一个参数,我们可以控制(配置)。
- 段中删除数据的大于设定的比例值,默认为三分之一,也就是当删除的数据大于该段总大小的三分之一,就会符合段合并的条件。这个我们可以设置,可设置的范围为:20% - 50%。
以上连个条件为或的关系,满足其中一个就可以进行段合并。
问题四:段合并的过程究竟是怎么样的
直接从原文找答案吧。
问题五:什么时候就不再进行段合并 + 不再段合并会有什么问题
在问题三中,已经说了段合并的两个条件,当两个条件都不满足的情况下,则段不能合并。
此时在极端情况,如果发生了,段的大小大于2.5G。且删除的数据不够百分之三十。则这个大段不会发生段合并,假如段中删除的内容又比较多,就是很大的问题。它门会占用我们我们的磁盘空间,相当于是发生了磁盘空间泄露。另外,在检索过程中,实际上是,检索出所有的数据,然后再去掉标记删除的数据,如果迟迟不能发生段合并,无法将删除的数据释放出去,则会给检索过程带来负面影响。
-
SQL中将两个表合并成一个新表
2021-06-20 00:41:56如何用SQL语句实现将两个不同结构的表合并到一个新如何用SQL语句实现将两个不同结构的表合并到一个新表中 select * from table1 union select * from table2sql把两个表合并成一个新表的语句应该怎么写SQL SERVER: ...如何用SQL语句实现将两个不同结构的表合并到一个新如何用SQL语句实现将两个不同结构的表合并到一个新表中 select * from table1 union select * from table2
sql把两个表合并成一个新表的语句应该怎么写SQL SERVER: select * into 表3 from ( select 字段列表1 from 表1 union all select 字段列表2 from 表2 ) a 说明:字段列表1与字段列表1要数目相同、类型兼容 其它数据库自己参考。
如何用SQL语句实现将两个不同结构的表合并到一个新...说说具体的需CSS布局HTML小编今天和大家分享。 表结构不同,也可以有逻辑条件有相关联性的拼接,或者fileds字段的拼接等。
如何用sql 语句将两个数据表相同字段合并成另外一个表
select a,b,c from tb1 union (all)
SQL如何合并两个表并生成一个新表?
两表怎么合到一个表上,命名为价格表3,表头为【11
55create tab3 as select tab2.t2id t2id,tab1.tname tname from tab1,tab2 where tab1.tid=tab2.t1_id
怎么把SQL多个表关联合并成一个表
怎么把表1,表2,表3 合并成 表4 表1 ID qty1 1 10 2 10 表2 ID qty2 2 用union all+group by。多少ID都没关系吧,除非你说的是有上千个表。。。 select ID,sum(qty1) qty1,sum(qty2) qty2,sum(qty3) qty3 (select ID,qty1,0 qty2,0 qty3 from 表1 union allselect ID,0 qty1,qty2,0 qty3 from 表2 union allselect I
怎样用sql语句实现将两个没有关系的表拼接成一张表表 A 字段 a b c d 表B 字段 e f g h 拼成后的表C 字段 a b c d e f g h
创建测试表, create table test_aaa( value varchar2(20)); create table test_bbb( value varchar2(20));
插入测试数据 insert into test_aaa values ('abcd'); insert into test_bbb values ('efgh'); commit;
SQL查询出两个数据表,再通过这两个表的相同字段合SQL查询出两个数据表,再通过这两个表的相同字段合并成一个数据表,查询你试一下,不知对不对 呵呵 seletct 物料代码,期初数据,总入库数量,总出库数量,(期初数据+总入库数量-总出库数量) as 结存数据 from (select * from a full join b on a.物料代码=b.物料代码) c
SQL 两张表合并 (两张表的列都相同)
第一种 用一张临时表,吧所有数据都放在一张表里 INSE INTO QunList SELECT * FROM QunList89,90,91,92; 再在QunList中查询 第二种用 UNION ALL方式查询 SELECT * FROM QunList89 UNION ALL SELECT * FROM QunList90;
sql 两个表中不同的列合成一个表
表A 姓名 张三 表B 学校 xx中学 结果表C 姓名 学校 张三 xx中学 这两个在两个表中需要各有一个关键列比如xuexiao_id来互相对应,以正确匹配。例句如下: create table 表C (姓名 char(12) , 学校 char(36)); insert into table 表C ( (姓名 , 学校) select a.姓名,b.学校 from 表A a join 表B b on a.xuexiao_id=b.x
-
将SQL语句合并为一行
2018-03-29 18:02:54替换掉换行符之后再把” “替换为” “,两个空格替换为一个空格,多点几次全部替换直到没有可替换的位置,这样就不会有多余的空格了。 最后将sql复制到java文件中就可以了,但这种方法的可读性很差,在需要时可以... -
C将两个有序的数组合并成一个有序数组
2021-11-08 21:29:35编写程序,分别输入两个按从小到大排序的数组 a 和 b,将这两个有序数组合并,使合并后的数组仍是从小到大有序的。 合并两个有序数组的方法: 有两个有序数组a和b,其中数组a的末尾有足够的空间容纳数组b,将... -
【数据结构笔记】将两个递增的有序链表合并为一个递增的有序链表
2022-01-19 09:47:20将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。 [题目分析] 合并后的新表用头指针Lc指向,pa和pb分别是链表La和Lb... -
[PPT考点]如何将两个幻灯片合并在一个幻灯片?
2021-07-28 09:58:45原标题:[PPT考点]如何将两个幻灯片合并在一个幻灯片?在全国计算机二级考试中,MS Office是最为实用的一个科目,而MS Office科目的操作题中,最为简易得分的便是PPT的操作,那么,你知道在PPT的操作中如何将两个... -
将两个有序单链表合并为一个有序单链表
2019-08-01 14:45:28将两个有序单链表合并为一个有序单链表 //完整代码段 #include<stdio.h> #include<stdlib.h> typedef struct LNode{ int data; struct LNode* next; }LNode; LNode* Createlist(int length)//尾插法... -
SQL如何将两个字段合并到一个字段里
2022-01-03 17:57:21常见的数据库类型语法sql serveroracleMySQLaccess sql server 语法:select 字段A+字段B as 别名 from 表名; 示例:select xm+sfzjh as grxx from t_jbxx oracle 语法1:select 字段A||字段B as 别名 from 表名;... -
mysql实现将 两个字段合并成一个字段查询
2022-01-10 17:38:23mysql实现将 两个字段合并成一个字段查询 CONCAT()函数用于将多个字符串连接成一个字符串。 SELECT d.psl_code, d.psl_name, concat( d.psl_code,",",d.psl_name) as w FROM monthly_bill_detail_price_... -
Python 之将小段视频合并
2020-02-12 02:34:21在手机上,或者电脑端,有时候我们看一个视频,网站为了保证页面流畅,总是以 hls 直播视频流的方式将一整段视频切割成一小段一小段的返回给前端。 而我们如果有下载的需求,并且通过该整个视频扒下来,会发现获取到... -
关于python:如何将两个列表合并到一个列表中?
2020-12-08 18:55:45我有a = [1, 2]b = ['a', 'b']我想要c = [1, 'a', 2, 'b']号@cdleary's answer ...为"在python中扁平化一个浅列表"的各种方法提供性能比较(扁平化zip(a,b)为您提供了答案)。[j for i in zip(a,b) for j in i]。它... -
怎么样查询两个不同表字段数据合并?
2021-01-19 07:11:51本人有两张表表AC1C2C3123356表BC1C3C4C545712346注:两张表的字段不同并且完全独立没有关系最终理想结果:不存在的表字段为nn=nullC1C2C3C4C5123nn356n... -
关于 Elasticsearch 段合并,这一篇说透了!
2020-10-10 06:16:260、事出有因 您好,目前我需要将只读索引segment合并,有几个问题想要求教1、 segment是不是合并到一个最好,及max_num_segments=12、合并的时候,通过POST... -
kettle如何将多行数据合并为一列?
2018-11-03 09:16:09 数据效果如图所示,想要得到的效果: STCD STNM STLC 发送到 阿斯蒂芬 是的发 ... 是的 斯蒂芬 是的飞 -
用Python将两个word文档合并为一个内容,并输出
2018-09-11 23:20:44import docx #获得文档 file=docx.Document("1.docx") file2=docx.Document("2.docx") str=[] #按照段落读取文档内容 for para in file.paragraphs: str.append(para.text) ... str.append(... -
mysql将两张表合并为一张表
2019-04-08 14:08:54有些时候我们需要把两张字段相同的表合的数据信息合并到一张表中 语法 INSERT INTO table1 SELECT * FROM table2 注释 上面语句的意思就是将table2的数据导入到我们已经存在的table1中,一定要注意我们两张表的字段... -
SQLite中怎么将两个字段字符串合并连接为一个
2019-03-08 08:15:15SQLite中怎么将两个字段字符串合并连接为一个 在SQLite下我测试了 SELECT 'A'+'B' 结果为0 select "A"+"1" 结果为1 select "A"+1 结果为1 select 2+1 结果为3 感觉在“+”运算中,... -
如何把两段即以上视频合并成一个
2019-03-08 17:03:18快节奏的生活方式,使得很多人对文字失去了耐心,不管是学习或者是简单的娱乐,都会用到视频,像小编一样有自己的爱豆的会经常把很多视频合并成一个,这样很方便观看,那如何把两段即以上视频合并成一个呢?... -
怎么让MySQL 两个表的列合并叠加成一个新的表,
2021-04-25 11:00:11如何让MySQL 两个表的列合并叠加成一个新的表,求助!!!'有如下两个表,每个表中很多个字段,但是分别只需要获取如下3个字段'BIAO1'UIDNAMEADDTIME'04黄翠翠1003'02吴颖1004'07黄翠翠1049'BIAO2'UIDTITLEADDTIME'... -
mysql把两个查询的结果合并为一个结果
2021-06-28 09:09:061、用法:将两个表合并成一个表 b299cdadfdec3fda624ba211df22fcd1.png 2、语句: select 需保留重复行 select 查询结果 from 从哪张表查询 union all select 查询结果 from 从哪张表查询 练习: 将课程表及课程表1... -
多个日期时间段进行合并,算出经历的时长
2019-10-31 10:46:34多个日期时间段进行合并,算出经历的时长背景描述思路代码 背景描述 ...我们在程序中,可以将多个时间段中的两段分别“冒泡”比较,如果有重叠,那么进行合并,将这两个段去除,将合并后的时间段加入,... -
oracle将两个不同的字段合并到一个字段中
2020-06-01 13:52:51Concat函数: Concat(Concat(字段1,':'),字段2) -
Elasticsearch搜索引擎:ES的segment段合并原理
2021-06-16 11:42:14一、segment文件的合并流程: 当我们往 ElasticSearch 写入数据时,数据是先写入 memory buffer,然后定时(默认每隔1s)将 memory buffer 中的数据写入一个新的 segment 文件中,并进入 Filesystem cache(同时... -
在Java中将两个arrayList合并到一个新的arrayList中,没有重复且没有顺序
2021-03-08 04:40:15我试图“合并”两个arrayList,产生一个新的arrayList,其中包含两个组合arrayLists中的所有数字,但没有任何重复的元素,它们应该是有序的。我想出了下面的这段代码。我遍历了它,这对我来说很有意义,但是我不确定... -
将多个excel文件合并为:一个excel文件的多个sheet页【方法技巧】
2021-01-20 12:10:58将多个excel文件合并为:一个excel的多个sheet页【方法技巧】 大家平时在进行excel表格文件处理时,经常碰到需要多个excel文件合并成一个excel表格文挡,并且每个文档都保存在一个单独的sheet工作表中,一个一个的... -
elasticsearch 段合并实操,带图
2020-07-22 01:43:37在学习es的优化方案,很多文章提到进行段合并,会提升查询的性能。还参考了官网,但是我觉得并不全对。我的数据是8亿,带一个副本,大概... 以下的截图:是我在进行段合并的时候,对我的集群状态进行一个截图,包含... -
CAD多段线无法合并的问题
2021-11-09 14:46:17感觉问题不大,但是在样条线合并成一条线上遇到了麻烦。最终搞清楚了,写下来方便将来忘掉。 首先不论是直线还是多段线都是可以直接合并的。 直线工具L画出来的部分,每条线可以单独选择编辑。 多段线工具PL画出来的... -
Pr合并两个视频
2022-02-02 10:44:22运用Pr软件合并两个视频