前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【例说】Verilog HDL 编译器指令,你见过几个?

【例说】Verilog HDL 编译器指令,你见过几个?

作者头像
碎碎思
发布于 2021-10-18 06:24:49
发布于 2021-10-18 06:24:49
1.8K00
代码可运行
举报
文章被收录于专栏:OpenFPGAOpenFPGA
运行总次数:0
代码可运行

Verilog HDL 编译器指令

复杂一点的系统在进行设计或者验证时,都会用到一些编译器指令,那么什么是编译器指令?

Verilog HDL编译器指令由重音符(')开始。在Verilog 语言编译时,特定的编译器指令在整个编译过程中有效(编译过程可跨越多个文件),直到遇到其它的不同编译程序指令。不完整的标准编译器指令如下:

下面分解一下,每个指令单独说明一下:

’define和’undef

1.’define指令

’define指令用于文本替换,它很像C语言中#define指令。它生成一个文本宏。该指令既可以在模块内部定义,也可以在模块之外定义。一旦编译了’define指令,它在整个编译过程中都有效。

如果已经定义了一个文本宏,那么在它的宏名之前加上重音符号(’)就可以在源程序中'引用该文本宏。

在编译器编译时,将会自动用相应的文本块代替字符串'macro_name。将Verilog HDL中的所有编译指令都看作预定义的宏名,将一个编译指令重新定义为一个宏名是非法的。

一个文本宏定义可以带有一个参数。这样,就允许为每一个单独的应用定制文本宏。

文本宏定义的语法格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'define <text_macro_name> <macro_text>

其中: (1)<text_macro_name>为文本的宏名字,其语法格式为

text_macro_identifier[<list_of_formal_arguments>]

①text_macro_identifier为宏标识符,要求简单标识符。

②<list_of_formal_arguments>为形参列表。一旦定义一个宏名,就可以在源程序的任何地方使用它,而没有范围限制。

(2)<macro_text>为宏文本,可以是与宏名同行的任意指定文本。

①如果指定的文本超过一行,那么新的一行需要用反斜杠()作为起始。这样,反斜杠后面的文本也将作为宏文本的一部分,参与宏替换。反斜杠本身并不参与宏替换,编译时将忽略它。

②如果宏文本包含了一个单行注释语句(以“//”开始的注释语句),则该语句不属于替换文本,编译时不参与替换。

③宏文本可以空白。

[例] ’define指令Verilog HDL化述的例子1。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'define wordsize 8

reg[1:'wordsize] data;
//define a nand with variable delay

'define var_nand(dly) nand #dly
'var_nand(2) gl21 (q21, nl0, nil);
'var_nand(5) gl22(q22, nl0, nil);

[例] ’define指令Verilog HDL非法描述的例子2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'define first_half "start of string
$ display( ’first_half end of string");

[例] 'define 指令 Verilog HDL 非法描述的例子 3。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'define max(a,b)((a)>(b)?(a):(b))
n = 'max(p + q, r + s) ;

将要扩展为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
n = ((p + q ) >(r + s))?(p + q ) :(r + s);

2.'undef指令

'undef指令用于取消前面定义的宏。如果先前并没有使用指令’define进行宏定义,那么使用’undef指令将会导致一个警告。

’undef指令的语法格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'undef text_macro_identifier

一个取消的宏没有值, 就如同没有被定义一样。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'define SIZE 8
'define xor_b(x,y)(x &!y)|(!x & y)
//These text macros can be used as follow:
reg ['SIZE - 1 : 0] data out;
c = xor_b(a, b);
'undef SIZE

’celldefine和’endcelldefine

这两个指令用于将模块标记为单元模块,它们表示包含模块定义。某些PLI使用单元模块用于这些应用,如计算延迟。

该命令可以出现在源代码描述中的任何地方。但是,推荐将其放在模块定义的外部。

[例] ’celldefine指令Verilog HDL描述的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'celldefine
module my_and(y, a, b);
output y;
input a, b;

assign y = a & b;

endmodule
'endcelldefine

’default_nettype

该指令用于为隐含网络指定网络类型,也就是为那些没有被说明的连线定义网络类型。它只可以出现在模块声明的外部,允许多个’default_netype指令。

如果没有出现’default_netype指令,或者如果指定了’resetall指令,则隐含的网络类型是wire。当default_netype设置为none时,需要明确地声明所有网络;如果没有明确地声明网络,则产生错误。

’default_netype指令格式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'default_nettype default_nettype_value

其中default_nettype_value的值可以是wire、tri、tri0、tri1、wand、triand、wor、trior、trireg、uwire和none。

'ifdef、 'else、 ’elsif、 ’endif 和’ifndef

'ifdef编译器命令

条件编译:

显而易见,即只有在条件满足的时候才对这部分代码进行编译,也就是对一部分内容指定了编译的条件:

当满足条件时对一组语句进行编译,

当条件不满足时则对另外一组语句进行编译。

用途:

1、选择一个模板的不同代表部分。

2、选择不同的时序或结构信息。

3、对不同的EDA工具,选择不同的激励。(如:Verilog代码中的一部分可能因编译环境不同而不同,为避免在不同环境需要替换不同版本的Verilog 设计,条件编译就是一个很好的解决方案)

用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'ifdef 宏名(标识符)
    程序段1...
'else
    程序段2...
'endif

当宏名被定义过了,就编译程序段1;反之,当宏名未被定义过,就编译程序段2;

其中,else部分可以省略。即:当宏名被定义过了,就编译程序段1;反之,不编译程序段1;

[例] ’ifdef 指令 Verilog HDL 描述的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module and_op (a, b, c);
output a;
input b, c;
'ifdef behavioral
 wire a = b & c;
'else
 and a1 (a,b,c);
'endif

endmodule

‘ifndef编译器命令

额外的,还有‘ifndef语句,与’ifdef功能相反:

即当宏名没被定义过,就编译程序段1;反之,当宏名未被定义过了,就编译程序段2;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'ifndef 宏名(标识符)
    程序段1...
'else
    程序段2...
'endif

[例] ’ifndef 指令 Verilog HDL 描述的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module test;
'ifdef first_block
 'ifndef second_nest
  initial $ display("first_block_is_defined");
 'else
  initial $ display("first_block and second_nest defined");
 'endif
'elsif second_block 
 initial $ display( "second_block defined, first_block is not”);
'else
 'ifndef last_result
  initial $ display("first_block, second_block,"
  ”last_result not defined.");
'elsif real_last
 initial $ display("first_block, second_block not defined,"
  " last_result and real last defined.");
'else
 initial $ display("Only last result defined!");
 'endif
'endif

endmodule

这里还有一个‘elsif指令,简单说明一下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'ifndef test_macro_identifier
ifndef_group_of_1ines
{ 'elsif text_macro_identifier elsif_group_of_lines }
[ 'else else_group_of_lines ]
'endif

①当遇到’ifndef时,测试’ifdef文本宏标识符,查看在Verilog HDL源文件描述中是否使用'define作为一个文本宏名字;②如果’ifndef没有定义文本宏标识符,则对’ifndef所包含的行作为描述的一部分进行编译,如果还有’else或者’dsif编译器指令,则忽略这些编译器指令和相关的行组;③如果定义’ifiidef文本宏标识符,则忽略’ifndef所包含的行;④如果有’elsif编译器指令,测试'elsif文本宏标识符,查看在Verilog HDL源文件描述中,是否使用'define作为一个文本宏名字;⑤如果’elsdef定义文本宏标识符,则对’elsdef所包含的行作为描述的一部分进行编译,如果还有’else或者’elsif编译器指令,则忽略这些编译器指令和相关的行组;⑥如果没有定义第一个'elsif文本宏标识符,则忽略第一个’elsif所包含的行;⑦如果有多个’elsif编译器命令,将按照它们在Verilog HDL源文件中的描述顺序和评估第一个’elsif编译器指令的方法,对这些指令进行评估;⑧如果有一个’else编译器命令,则将’else所包含的行作为描述的一部分进行编译。

’include

在编译期间,’include编译器指令用于嵌入另一个文件的内容。既可以用相对路径名定义文件,也可以用全路径名定义文件。其语法格式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'include "filename"

使用’inchide编译器指令的优势主要体现在以下几方面:

(1)提供了一个配置管理不可分割的一部分;

(2)改善了VerilogHDL源文件描述的组织结构;

(3)便于维护Verilog HDL源文件描述。

[例 ]’include指令Verilog HDL描述的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'include "parts/count. v"
'include "fileB"
'include "fileB" //包含 fileB

'resetall

该编译器遇到’resetall指令时,会将所有的编译指令重新设置为默认值。推荐在源文件的开始放置’resetall.将'resetall命令放置在模块内或者UDP声明中是非法的。其语法格式为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'resetall

’line

对于Verilog工具来说,跟踪Verilog HDL源文件的名字和文件的行的行号是非常重要的,这些信息可以用于调试错误消息或者源代码,Verilog PL1访问可以它。

然而,在很多情况下,Verilog源文件由其他工具进行了预处理。由于预处理工具可能在Verilog HDL源文件中添加了额外的行,或者将多个源代码行合并为一个行,或者并置多个源文件,等等,可能会丢失原始的源文件和行信息。

'line编译器命令可以用于指定的原始源代码的行号和文件名。如果其他过程修改了源文件,这允许定位原始的文件。当指定了新行的行号和文件名时,编译器就可以正确地定位原始的源文件位置。然而,这要求相应的工具不产生’line命令。

其语法格式为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'line number "filename" level

其中,number是一个正整数,用于指定跟随文本行的新行行号,filename是一个字符串常数,将其看作文件的新名字,文件名可以是全路径名字或者相对路径名字;level为该参数的值,可以是0、1或者2:①当为1的时候,输入一个include行后的下面一行是第一行;②当为2的时候,退出一个inlcude行后的下面一行是第一行;③当为0的时候,指示任何其他行。

[例] 'line 指令 Verilog HDL 描述的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'line3 "orig.v" 2

//该行是 orig.v 存在 include 文件后的第 3 行。

’timescale

在Verilog HDL模型中,所有的时延都用单位时间表述。可使用'timescale编译器指令将时间单位与实际时间相关联,该指令用于定义时延的单位和时延精度。

作用:

timescale用于定义延时的单位和延时的精度,如timescale 1ns/100ps那么时间单位就是1ns,精度就是100ps。

时间单位,表示了仿真时测量的单位,比如延时1,1ns;精度则表示仿真器只识别的范围,比如精度是100ps,那么如果你1.3ns,编译器是识别,但是如果写1.32,那么由于精度达不到那么细,所以0.02被四舍五入掉。

`timescale影响着全部模块,直到遇到另外的timescale。

’timescale编译器指令格式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
’timescale time_unit/time_precision

其中,time_unit指定用于时间和延迟测量的单位,可选的值为1、10或100;time_precision用于仿真前,确定四舍五入延迟值。时间分辨率子,可选的单位为s \ms\us\ns\ps或fs。

[例] 'timescale 指令 Verilog HDL 描述的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'timescale 10 ns / 1 ns
module test;
reg set;
parameter d = 1.55;
initial begin
# d set = 0;
# d set = 1;
end
endmodule

根据时间精度, 参数 d 的值从 1.55 四舍五入到 1.6。模块的时间单位是 10ns 精度是1 ns。因此, 参数 d 的延迟从 1.6 标定到 16。

’unconnected_drive和'nounconnected_drive

当一个模块所有未连接的端口出现在'unconnected_drive和’nounconnecteddrive指令之间时,将这些未连接的端口上拉或者下拉,而不是按通常的默认值处理。

指令’unconnected_drive使用pull1/pull0参数中的一个:当指定pull时,所有未连接的端口自动上拉;当指定pill0时,所有未连接的端口自动下拉。

建议成对使用’unconnected_drive和'nounconnected_drive指令,但不是强制要求。这些指令在模块外部成对指定。

'resetall指令包括'nounconnected_drive指令的效果。

[例]nounconnected_drive/ 'unconnected drive 指令 Verilog HDL 描述的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'unconnected_drive pull1
module my_and(y, a, b);
output y;
input a, b;
assign y = a & b;
endmodule

module test;
reg b;
wire y;
my_and ul(y, ,b);
endmodule

'nounconnected_drive

'pragma

’pragma指令是一个结构化的说明,它用于改变对Verilog HDL源文件的理解。由这个指令所引入的说明称为编译指示。编译指示不同于Verilog HDL标准所指定的结果,它为指定实现的结果。其语法格式为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
’pragma pragma_name [ pragma_expression { , pragma_expression } ]

其中 ,pragma_name 为编译指示的名字, 可以是 $ 开头的系统标识符或者一般标识符; pragma_expression 为编译指示表达式。

注:reset和resetall编译指示将恢复默认值和pragma_keywords所影响的状态。

'begin_keywords和’end_keyword

'begin_keywords和'end_keyword指令用于指定在一个源代码块中,基于不同版本的IEEE_Stdl364标准,确定用于关键字的保留字。该对指令只指定那些作为保留关键字的标识符。只能在设计元素(模块、原语和配置)外指定该关键字,并且需要成对使用。其语法格式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'begin_keywords "version_specifier"
    ...
'end_keyword

其中,version_specifier为可选的参数,包括1364-1995、1364-2001、1364-2001-noconfig和1364-2005。

[例] ’begin_keywords 和 'end_keyword 指令 Verilog HDL 描述的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'begin_keywords "1364- 2001" //使 用 IEEE Std 1364- 2001 Verilog 关 键 字
'module  m2(...); 
reg[63:0] logic;           //logic 不 是 1364 - 2001 的 关 键 字

...

endmodule

'end_keywords

(补充一)Verilog编译器指示语句

设计者在写设计代码时,有时可能针对仿真写一些语句,这些语句可能是不为DC所接受,也不希望DC接受;设计者如果不对这些语句进行特殊说明,DC读入设计代码时就会产生语法错误。另一种情况是,设计者在写设计代码,有些设计代码是为专有的对象写的(如公司内部),这些专有的设计代码可能不希望被综合。Synopsys提供了引导语句,设计者可以使用这些引导语句控制DC综合的对象

可以利用HDL描述中的一些特定的注释语句来控制综合工具的工作,从而弥补仿真环境和综合环境之间的差异,这些注释语句称为编译器指示语句。

translate_off/ translate_on

这组语句用来指示DC停止翻译 “//synopsys.。.translate_off”之后的Verilog描述,直至出现 “//synopsys translate_on”。当Verilog代码钟含有供仿真用的不可综合语句时,这项功能能使代码方便地在仿真工具与综合工具之间移植。

例1(translate_off/ translate_on指示语句的使用):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//synopsys translate_off

//synopsys translate_on

parallel_case/ full_case

DC可能使用带优先级的结构来综合Verilog的case语句,为避免这种情况,可以使用“//synopsys.。.parallel_case”指示DC将case语句综合为并行的多路选择器结构。

(parallel_case指示语句的使用):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
always @ (state)

case (state) //synopsys parallel_case

2’b00:new_state = 2’b01;

2’b01:new_state = 2’b10;

2’b10:new_state = 2’b00;

default:new_state = 2’b00;

endcase

另外,Verilog允许case语句不覆盖所有可能情况,当这样的代码由DC综合时将产生锁存器。为避免这种情况,可以使用“//synopsys full_case”指示DC所有可能已完全覆盖。

例2 (full_case指示语句的使用):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
always @ (sel or a1 or a2)

case (sel) //synopsys full_case

2’b00:z = a1;

2’b01:z = a2;

2’b10:z = a1 & a2;

endcase

(补充二)Verilog PL1是什么?

上面有提到过PLI接口,这里简单介绍下,因为用的比较少,所以就一笔带过。

编程语言接口(Program Language Interface,PLI)提供了通过C语言函数对Verilog数据结构进行存储和读取操作的方法。

PLI接口主要提供以下三种功能。

(1)PLI接口允许用户编写自定义的系统任务和系统函数。用户写出相应的PLI程序并连接到仿真器后,就可以在自己写的VerilogHDL程序中使用这些系统任务和系统函数。一旦在仿真过程中调用这些任务或者函数,仿真器就会找到对应的用户所编写的PLI程序并执行,从而实现仿真器的定制。

(2)这个接口还允许用户在自己的PLI程序中与仿真器中例化的VerilogHDL硬件进行交互,如读一个线网络的值、向一排寄存器写值以及设置一个单元的延迟,等等。

对于PLI程序而言,仿真器中的Verilog实例完全透明,用户可以对这些硬件做任何操作(当然,不能修改硬件结构)。有了这个功能,用户就可以在自定义的任务/函数中对硬件执行某些用VerilogHDL语言难以完成的操作。

(3)某些特定的操作需要对仿真过程中一些信号的变化做出响应,虽然可以用always过程语句来监控少量信号的变化,但如果需要监测大量信号,这种机制并不现实。

PLI接口提供了一种函数回调机制解决这个问题。用户可以将某个线网络/寄存器等信号挂上一个PLI程序中的C函数。每当该信号变化时,调用这个C函数,从而很方便地监测信号。

除了上面所说的这些机制外,PLI还能让用户控制仿真的过程,例如暂停、退出以及向日志文件里写信息等,还可以获取仿真过程的数据,如当前仿真时间等。在实际的PLI程序中,同样不可缺少这些功能。

参考资料

1、http://www.elecfans.com/d/651393.html

2、EDA原理及Verilog实现

3、https://www.cnblogs.com/IClearner/p/7258983.html

NOW现在行动!

学习Xilinx FPGA最好的资料其实就是官方手册,下表总结了部分手册的主要介绍内容,关注我,持续更新中......

文件名

主标题

内容简单介绍

是否有中文版

UG476

7 Series FPGAs GTX/GTH Transceivers

GTX和GTH介绍,PCIe、serdes等学习必备

UG471

7 Series FPGAs SelectIO Resources

描述 7 系列 FPGA 中可用的 SelectIO资源。

UG1114

PetaLinux Tools Documentaton

PetaLinux 工具文档 参考指南

是,V2019.2

UG949

UltraFAST 设计方法指南(适用于 Vivado Design Suite)

赛灵思® UltraFast™ 设计方法是用于为当今器件优化设计进程的一套最佳实践。这些设计的规模与复杂性需要执行特定的步骤与设计任务,从而确保设计每一个阶段的成功开展。依照这些步骤,并遵循最佳实践,将帮助您以最快的速度和最高的效率实现期望的设计目标

是,V2018.1

IP手册

pg057

FIFO Generator

FIFO生成器IP使用手册

pg104

Complex Multiplier

复数乘法器IP使用手册

pg122

RAM-Based Shift Register

移位寄存器IP使用手册

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenFPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
python glob使用
http://www.cnblogs.com/lovemo1314/archive/2011/04/26/2029556.html
bear_fish
2018/09/19
1.3K0
python中的glob模块
可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。查找文件只用到三个匹配符:”*”, “?”, “[ ]”。 ”*”匹配0个或多个字符; ”?”匹配单个字符; ”[ ]”匹配指
狼啸风云
2019/01/18
1.1K0
文件和目录操作(二)、glob模块
可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。查找文件只用到三个匹配符:”*”, “?”, “[ ]”。 ”*”匹配0个或多个字符; ”?”匹配单个字符; ”[ ]”匹配指
狼啸风云
2019/10/22
1.5K0
文件和目录操作(二)、glob模块
python基础学习os、 glob模块
glob模块 1.glob.glob(pathname), 返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。 2.glob.iglob(pathname), 获取一个可编历对象,使用它可以逐个获取匹配的文件路径名。与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而glob.iglob一次只获取一个匹配路径。 glob模块可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。它有三
哆哆Excel
2022/10/31
7010
数据处理技巧 | glob - 被忽略的超强文件批量处理模块
本篇推文开始,我将介绍一些常用的Python数据处理小技巧,帮助大家更好的处理数据,提高工作效率。今天我将介绍Python自带的一个模块-glob模块。涉及的内容主要如下:
DataCharm
2021/02/22
1.3K0
Python glob 模块全解析:轻松处理文件路径匹配
在 Python 中,glob 模块 主要用于 查找符合特定规则的文件路径,它支持使用通配符(如 *、? 和 [])来进行灵活的文件搜索。相比于 os.listdir(),glob 更适合按模式匹配文件,非常适用于批量处理文件。
不止于python
2025/03/17
1420
Python glob 模块全解析:轻松处理文件路径匹配
Python - 获取文件夹内所有文件
本文记录Python 获取指定文件夹内所有文件的方法。 测试环境 新建了3个文件夹和11个文件 glob glob模块可以返回指定路径(可绝对/可相对)下的符合制定匹配模式的文件路径。
为为为什么
2022/08/04
1.2K0
Python - 获取文件夹内所有文件
Python: glob匹配文件
glob模块实例详解 glob的应用场景是要寻找一系列(符合特定规则)文件名。 glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。查找文件只用到三个匹配符:”*”, “
用户2183996
2018/06/21
2.4K0
glob模块基本介绍
通过指定recursive=True可以进行递归查找,模式**将匹配任何文件以及零个或多个目录,子目录和目录的符号链接。
炒香菇的书呆子
2023/10/11
3260
【实用 Python 库】Python glob库:轻松应对文件和目录管理
在Python编程中,我们经常需要处理文件和目录。为了更便捷地处理这些任务,Python提供了glob库,它允许我们根据特定模式匹配文件和目录。本篇博客将详细介绍glob库的用法,并通过实例演示它的各种功能。
繁依Fanyi
2023/10/12
1.7K0
深度对比Python中4大文件处理库(os、shutil、glob、pathlib)
os库应该是使用频率最高的一个文件处理库,但是不得不说Python中还有几个其它的文件处理库,像shutil库、glob库、pathlib库,它们可以说是相互补充,有着自己好用的方法。黄同学亲切的将它们合称为Python文件处理库的四大天王。
快学Python
2021/12/07
7.4K0
深度对比Python中4大文件处理库(os、shutil、glob、pathlib)
Python标准库glob用法精要
Python标准库glob提供了glob()和iglob()两个函数用来枚举指定文件夹中符合特定模式的文件列表,支持“?”和“*”通配符。 >>> import glob # 查找所有扩展名为txt
Python小屋屋主
2018/04/16
1.3K0
python—subprocess、gl
运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。
py3study
2020/01/09
1.5K0
glob库函数使用方法
glob模块是用来获取文件路径的一个常用模块。它可以根据用户指定的路径来搜索文件,然后返回符合规则的文件路径列表。
很酷的站长
2023/10/31
4790
glob库函数使用方法
Python实现:教你轻松统计文件夹下文件个数
在日常的文件管理中,我们经常需要统计某个文件夹下文件的数量,这对于数据管理、文件清理等工作至关重要。Python作为一种强大而灵活的编程语言,提供了多种方法来实现这一目标。本文将介绍几种Python实现统计文件夹下文件个数的方法,并逐步解析它们的原理和用法。
霍格沃兹测试开发Muller老师
2024/03/18
2920
【经典原创】分享几个好用到爆的Python内置模块
今天介绍几个好用到爆的Python内置库,相信大家看过之后会对今后的Python编程帮助多多
用户6888863
2022/04/13
3160
整理了十个Python自动化操作,拿走就用!
在过去的半年内,我总共发布了超过了40篇 「Python办公自动化」文章,不知道大家有没有发现,有一些模块、一些代码会频繁出现。而os、shutil、glob基本是每篇都会出现。
小F
2021/04/26
1.2K0
教你怎么用python操作文件
Python中有几个内置模块和方法来处理文件。这些方法被分割到例如os, os.path , shutil 和 pathlib 等等几个模块中。文章将列举Python中对文件最常用的操作和方法。
程序员小新
2022/01/11
6.5K0
Python 自动化办公之"你还在手动操作“文件”或“文件夹”吗?"
1、“罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢? 2、利用 Python 进行多 Sheet 表合并、多工作簿合并、一表按列拆分
杰哥的IT之旅
2020/06/18
8960
一文去掌握python 中pathlib库
在python中,我们知道常用的路径的是os模块,这里给大家介绍一个新的模块-pathlib。
雷子
2022/05/21
1K0
一文去掌握python 中pathlib库
推荐阅读
相关推荐
python glob使用
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • Verilog HDL 编译器指令
    • ’define和’undef
      • 1.’define指令
      • 2.'undef指令
    • ’celldefine和’endcelldefine
    • ’default_nettype
    • 'ifdef、 'else、 ’elsif、 ’endif 和’ifndef
      • 'ifdef编译器命令
      • ‘ifndef编译器命令
    • ’include
    • 'resetall
    • ’line
    • ’timescale
    • ’unconnected_drive和'nounconnected_drive
    • 'pragma
    • 'begin_keywords和’end_keyword
    • (补充一)Verilog编译器指示语句
      • translate_off/ translate_on
      • parallel_case/ full_case
    • (补充二)Verilog PL1是什么?
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文