一图看懂 linecache 模块:随机读写文本行, 资料整理+笔记(大全)

本文详细介绍了Python的linecache模块,包括其功能、常用函数如getline、clearcache等,以及与之相关的functools、sys、os和tokenize模块。通过类关系图和模块全展开,展示了linecache在Python生态系统中的位置。文章适合Python开发者了解和学习模块的使用。

本文由 大侠(AhcaoZhu)原创,转载请声明。
链接: https://blog.csdn.net/Ahcao2008

Alt

摘要

全文介绍系统内置 os 模块、函数、类及类的方法和属性。
它通过代码抓取并经AI智能翻译和人工校对。
是一部不可多得的权威字典类工具书。它是系列集的一部分。后续陆续发布、敬请关注。【原创:AhcaoZhu大侠】

模块图

linecache-module

linecache
	◆functools
	◆sys
	◆os
	◆tokenize

类关系图

linecache-class

◆object
	◆BaseException
		◆Exception
			◆OSError
			◆tokenize.StopTokenizing
			◆tokenize.TokenError
	◆_frozen_importlib.BuiltinImporter
	◆_io._IOBase
		◆_io._TextIOBase
			◆_io.TextIOWrapper
	◆_thread.RLock
	◆abc.ABC
		◆os.PathLike
	◆collections.abc.Container
		◆collections.abc.Iterable
			◆collections.abc.Sized
				◆collections.abc.Collection
					◆collections.abc.Mapping
						◆collections.abc.MutableMapping
							◆os._Environ
	◆functools._lru_cache_wrapper
	◆functools.partial
	◆functools.partialmethod
	◆itertools.chain
	◆list
		◆functools._HashedSeq
	◆nt.DirEntry
	◆os._wrap_close
	◆tokenize.Untokenizer
	◆tuple
		◆functools.CacheInfo
		◆nt.times_result
		◆nt.uname_result
		◆os.stat_result
		◆os.statvfs_result
		◆os.terminal_size
		◆tokenize.TokenInfo
			◆tokenize.TokenInfo

模块全展开

【linecache】

linecache, fullname=linecache, file=linecache.py

来自Python源文件的缓存行。
这是为了从导入的模块中读取行——因此,如果没有找到文件名,它将沿着模块搜索路径查找该文件名的文件。

统计

序号类别数量
4str5
6list1
8dict2
9module4
11function6
13residual2
14system9
16all20

常量

dict

1 cache {}

模块

2 functools

functools, fullname=functools, file=functools.py

3 sys

sys, fullname=sys, file=

4 os

os, fullname=os, file=os.py

5 tokenize

tokenize, fullname=tokenize, file=tokenize.py

Python程序的标记化帮助。
tokenize(readline)是一个生成器,它将字节流分解为Python令牌。
它根据PEP-0263对字节进行解码,以确定源文件编码。
它接受一个类似readline的方法,该方法被反复调用以获得下一行输入(或 b"" 表示EOF)。
它生成具有以下成员的5元组:
    令牌类型(参见token.py)
    令牌(字符串)
    令牌的开始(行,列)索引(二元整型组)
    令牌的结束(行,列)索引(二元整型组)
    原始行(字符串)
它被设计成与Python标记器的工作完全匹配,除了它为注释生成 COMMENT 令牌并为所有操作符提供OP类型。
此外,所有令牌列表都以ENCODING令牌开始,它告诉您使用哪种编码来解码字节流。

函数

6 getline(filename, lineno, module_globals=None)

getline(filename, lineno, module_globals=None), module=linecache, line:15 at linecache.py

7 clearcache()

clearcache(), module=linecache, line:30 at linecache.py

完全清除缓存。

8 getlines(filename, module_globals=None)

getlines(filename, module_globals=None), module=linecache, line:37 at linecache.py

从缓存中获取Python源文件的行。
如果缓存尚未包含此文件的条目,则更新缓存。

9 checkcache(filename=None)

checkcache(filename=None), module=linecache, line:53 at linecache.py

丢弃过期的缓存项。(这不是在每次调用时检查!)

10 updatecache(filename, module_globals=None)

updatecache(filename, module_globals=None), module=linecache, line:82 at linecache.py

更新缓存条目并返回其行列表。
如果出现错误,则打印一条消息,丢弃缓存条目,并返回一个空列表。

11 lazycache(filename, module_globals)

lazycache(filename, module_globals), module=linecache, line:147 at linecache.py

用模块全局变量为文件名种子缓存。
只有在调用getlines时才会向模块加载器请求源,而不是立即调用。
如果缓存中已经有条目,则不会更改它。
    :return:如果在缓存中注册了惰性加载,则为True,否则为False。
    要注册这样的加载,必须找到一个使用get_source方法的模块加载器,文件名必须是可缓存的文件名,并且文件名必须不是已经缓存的。

【functools】

functools, fullname=functools, file=functools.py

【sys】

sys, fullname=sys, file=

【os】

os, fullname=os, file=os.py

【tokenize】

tokenize, fullname=tokenize, file=tokenize.py

统计

序号类别数量
1int61
4str41
6list1
7set2
8dict4
9module4
10class6
11function16
12builtin_function_or_method2
13residual5
14system11
15private7
16all142

常量

int

1 ENDMARKER 0
2 NAME 1
3 NUMBER 2
4 STRING 3
5 NEWLINE 4
6 INDENT 5
7 DEDENT 6
8 LPAR 7
9 RPAR 8
10 LSQB 9
11 RSQB 10
12 COLON 11
13 COMMA 12
14 SEMI 13
15 PLUS 14
16 MINUS 15
17 STAR 16
18 SLASH 17
19 VBAR 18
20 AMPER 19
21 LESS 20
22 GREATER 21
23 EQUAL 22
24 DOT 23
25 PERCENT 24
26 LBRACE 25
27 RBRACE 26
28 EQEQUAL 27
29 NOTEQUAL 28
30 LESSEQUAL 29
31 GREATEREQUAL 30
32 TILDE 31
33 CIRCUMFLEX 32
34 LEFTSHIFT 33
35 RIGHTSHIFT 34
36 DOUBLESTAR 35
37 PLUSEQUAL 36
38 MINEQUAL 37
39 STAREQUAL 38
40 SLASHEQUAL 39
41 PERCENTEQUAL 40
42 AMPEREQUAL 41
43 VBAREQUAL 42
44 CIRCUMFLEXEQUAL 43
45 LEFTSHIFTEQUAL 44
46 RIGHTSHIFTEQUAL 45
47 DOUBLESTAREQUAL 46
48 DOUBLESLASH 47
49 DOUBLESLASHEQUAL 48
50 AT 49
51 ATEQUAL 50
52 RARROW 51
53 ELLIPSIS 52
54 OP 53
55 ERRORTOKEN 54
56 COMMENT 55
57 NL 56
58 ENCODING 57
59 N_TOKENS 58
60 NT_OFFSET 256
61 tabsize 8

str

62 Whitespace [ \f\t]*
63 Comment #[^\r\n]*
64 Ignore [ \f\t](\\r?\n[ \f\t])(#[^\r\n])?
65 Name \w+
66 Hexnumber 0xX+
67 Binnumber 0bB+
68 Octnumber 0oO+
69 Decnumber (?:0(?:?0)|1-9)
70 Intnumber (0xX+|0bB+|0oO+|(?:0(?:
?0)|1-9))
71 Exponent [eE][-+]?0-9*
72 Pointfloat (0-9.(?:0-9)?|.0-9)([eE][-+]?0-9)?
73 Expfloat 0-9[eE][-+]?0-9
74 Floatnumber ((0-9.(?:0-9)?|.0-9)([eE][-+]?0-9)?|0-9[eE][-+]?..
75 Imagnumber (0-9
[jJ]|((0-9.(?:0-9)?|.0-9)([eE][-+]?0-9)?|[0-…
76 Number ((0-9[jJ]|((0-9.(?:0-9)?|.0-9)([eE][-+]?0-9)?|[0…
77 StringPrefix (|rf|BR|b|br|Rb|FR|Fr|f|rF|rB|RB|F|fR|bR|R|fr|r|U|Br|Rf|rb|u|RF|B)
78 Single ['\]*(?:\.['\]
)
79 Double ["\]*(?:\.["\]
)"
80 Single3 [‘\]*(?😦?:\.|’(?!‘’))['\]
)‘’’
81 Double3 [“\]*(?😦?:\.|”(?!“”))["\]
)“”"
82 Triple ((|rf|BR|b|br|Rb|FR|Fr|f|rF|rB|RB|F|fR|bR|R|fr|r|U|Br|Rf|rb|u|RF|B)‘’‘|(|rf|BR|b|br|Rb|FR|Fr|f|rF|rB|RB|F|fR|bR|R|fr|r|U…
83 String ((|rf|BR|b|br|Rb|FR|Fr|f|rF|rB|RB|F|fR|bR|R|fr|r|U|Br|Rf|rb|u|RF|B)’[\n’\]*(?:\.[\n’\]
)'|(|rf|BR|b|br|Rb|FR|Fr|f|…
84 Operator (**=?|>>=?|<<=?|!=|//=?|->|[±
/%&@|^=<>]=?|~)
85 Bracket [][(){}]
86 Special (\r?\n|…|[:;.,@])
87 Funny ((**=?|>>=?|<<=?|!=|//=?|->|[±/%&@|^=<>]=?|~)|[][(){}]|(\r?\n|…|[:;.,@]))
88 PlainToken (((0-9
[jJ]|((0-9.(?:0-9)?|.0-9)([eE][-+]?0-9)?|[…
89 Token [ \f\t](\\r?\n[ \f\t])(#[^\r\n])?(((0-9[jJ]|((0-9.(?:0-9)?|.[0-9](?:_?[…
90 ContStr ((|rf|BR|b|br|Rb|FR|Fr|f|rF|rB|RB|F|fR|bR|R|fr|r|U|Br|Rf|rb|u|RF|B)‘[\n’\]*(?:\.[\n’\]
)('|\\r?\n)|(|rf|BR|b|br|R…
91 PseudoExtras (\\r?\n|\Z|#[^\r\n]
|((|rf|BR|b|br|Rb|FR|Fr|f|rF|rB|RB|F|fR|bR|R|fr|r|U|Br|Rf|rb|u|RF|B)‘’‘|(|rf|BR|b|br|Rb|FR|Fr|f|rF|…
92 PseudoToken [ \f\t]((\\r?\n|\Z|#[^\r\n]|((|rf|BR|b|br|Rb|FR|Fr|f|rF|rB|RB|F|fR|bR|R|fr|r|U|Br|Rf|rb|u|RF|B)’‘’|(|rf|BR|b|br|Rb|FR…
93 _prefix B
94 t B
95 u B’‘’

set

96 single_quoted {“BR’”, ‘rF"’, “rb’”, “'”, ‘u"’, “R’”, “r’”, “Fr’”, ‘R"’, ‘f"’, ‘bR"’, “fr’”, ‘BR"’, ‘br"’, ‘rf"’, ‘fR"’, “RB’”, ‘FR"’, …
97 triple_quoted {“r’‘’”, ‘r"“”’, “rf’‘’”, “Br’‘’”, “u’‘’”, ‘FR"“”’, ‘br"“”’, “Rf’‘’”, ‘bR"“”’, ‘U"“”’, ‘fR"“”’, ‘u"“”’, “fR’‘’”, ‘Fr"“”’…

dict

98 tok_name {0: ‘ENDMARKER’, 1: ‘NAME’, 2: ‘NUMBER’, 3: ‘STRING’, 4: ‘NEWLINE’, 5: ‘INDENT’, 6: ‘DEDENT’, 7: ‘LPAR’, 8: ‘RPAR’, 9: ‘…
99 EXACT_TOKEN_TYPES {’(‘: 7, ‘)’: 8, ‘[’: 9, ‘]’: 10, ‘:’: 11, ‘,’: 12, ‘;’: 13, ‘+’: 14, ‘-’: 15, ‘‘: 16, ‘/’: 17, ‘|’: 18, ‘&’: 19, ‘<’: …
100 endpats {"’": "['\\]*(?:\\.['\\]
)‘“, '”’: '["\\]*(?:\\.["\\])*"’, "’‘’": "[‘\\]*(?😦?:\\.|’(?!‘’))['\…

模块

101 collections

collections, fullname=collections, file=collections_init_.py

这个模块实现了专门的容器数据类型,提供了Python通用内置容器dict、list、set和tuple的替代方案。

102 itertools

itertools, fullname=itertools, file=

用于创建和使用迭代器的功能工具。

103 re

re, fullname=re, file=re.py

104 sys

sys, fullname=sys, file=

函数

105 ISTERMINAL(x)

ISTERMINAL(x), module=token, line:83 at token.py

106 ISNONTERMINAL(x)

ISNONTERMINAL(x), module=token, line:86 at token.py

107 ISEOF(x)

ISEOF(x), module=token, line:89 at token.py

108 group(*choices)

group(*choices), module=tokenize, line:107 at tokenize.py

109 any(*choices)

any(*choices), module=tokenize, line:108 at tokenize.py

110 maybe(*choices)

maybe(*choices), module=tokenize, line:109 at tokenize.py

111 _all_string_prefixes()

_all_string_prefixes(), module=tokenize, line:132 at tokenize.py

112 _compile(expr)

_compile(expr), module=tokenize, line:147 at tokenize.py

113 untokenize(iterable)

untokenize(iterable), module=tokenize, line:312 at tokenize.py

将令牌转换回Python源代码。
它返回一个bytes对象,使用ENCODING令牌进行编码,这是通过tokenize输出的第一个令牌序列。
iterable返回的每个元素必须是一个至少包含两个元素的令牌序列,一个令牌号和一个令牌值。
如果只传递两个令牌,则结果输出很差。
    完整输入的往返不变量:
        未标记化的源将与输入源完全匹配
    有限输入的往返不变量:
        # 输出字节将标记化回输入
        # Output bytes will tokenize back to the input
        t1 = [tok[:2] for tok in tokenize(f.readline)]
        newcode = untokenize(t1)
        readline = BytesIO(newcode).readline
        t2 = [tok[:2] for tok in tokenize(readline)]
        assert t1 == t2

114 _get_normal_name(orig_enc)

_get_normal_name(orig_enc), module=tokenize, line:339 at tokenize.py

在tokenizer.c中模拟得到正常名称。

115 detect_encoding(readline)

detect_encoding(readline), module=tokenize, line:350 at tokenize.py

detect_encoding()函数用于检测应该用于解码Python源文件的编码。
它需要一个参数readline,方法与tokenize()生成器相同。
它将最多调用readline两次,并返回所使用的编码(作为字符串)和它所读入的任何行(以字节形式保留)的列表。
它根据存在utf-8 bom 或 pep-0263 中指定的编码 cookie来检测编码。
如果bom和cookie都存在,但不一致,将引发SyntaxError。
如果编码cookie是一个无效的字符集,则引发SyntaxError。
注意,如果找到utf-8 bom,则返回'utf-8-sig'。如果没有指定编码,则将返回默认的'utf-8'。

116 open(filename)

open(filename), module=tokenize, line:443 at tokenize.py

使用detect_encoding()检测到的编码以只读模式打开文件。

117 tokenize(readline)

tokenize(readline), module=tokenize, line:459 at tokenize.py

tokenize()生成器需要一个参数readline,它必须是一个可调用对象,提供与内置文件对象的readline()方法相同的接口。
对函数的每次调用都应返回一行以字节表示的输入。
或者,readline可以是一个以StopIteration结束的可调用函数:
readline = open(myfile, 'rb').__next__  # 备用读行示例
生成器生成具有以下成员的5元组:
    token类型;
    令牌字符串;
    整数组成的二元组(srow, scol),指定源文件中令牌开始的行和列;
    整数组成的二元组(erow, ecol),指定令牌在源文件中结束的行和列;
    以及找到标记的行。
传递的线是逻辑线;继续行也包括在内。
第一个令牌序列将始终是一个ENCODING令牌,它告诉您使用哪种编码来解码字节流。

118 _tokenize(readline, encoding)

_tokenize(readline, encoding), module=tokenize, line:487 at tokenize.py

119 generate_tokens(readline)

generate_tokens(readline), module=tokenize, line:672 at tokenize.py

120 main()

main(), module=tokenize, line:675 at tokenize.py

121 _io.TextIOWrapper

TextIOWrapper, _io.TextIOWrapper, module=_io, line:0 at

字符和行基于层在BufferedIOBase对象,缓冲区。

122 itertools.chain

chain, itertools.chain, module=itertools, line:0 at

chain(*iterables) --> chain object
返回一个链对象.__next__()方法返回第一个可迭代对象中的元素,直到该可迭代对象耗尽,
然后返回下一个可迭代对象中的元素,直到所有可迭代对象耗尽。

123 tokenize.TokenInfo

TokenInfo, tokenize.TokenInfo, module=tokenize, line:94 at tokenize.py

property

1 exact_type=<property object at 0x00000000024AA3B8> kind:property type:property class:<class ‘tokenize.TokenInfo’>

124 tokenize.TokenError

TokenError, tokenize.TokenError, module=tokenize, line:212 at tokenize.py

125 tokenize.StopTokenizing

StopTokenizing, tokenize.StopTokenizing, module=tokenize, line:214 at tokenize.py

126 tokenize.Untokenizer

Untokenizer, tokenize.Untokenizer, module=tokenize, line:217 at tokenize.py

method
1 add_whitespace(self, start)

kind=method class=Untokenizer objtype=function line:225 at …\lib\tokenize.py

2 compat(self, token, iterable)

kind=method class=Untokenizer objtype=function line:275 at …\lib\tokenize.py

3 untokenize(self, iterable)

kind=method class=Untokenizer objtype=function line:238 at …\lib\tokenize.py

内嵌函数或方法

127 _builtin_open
128 lookup

私有或局部

129 _builtin_open
130 _itertools <module ‘itertools’ (built-in)>
131 _all_string_prefixes <function _all_string_prefixes at 0x00000000024A9AF8>
132 _compile <function _compile at 0x00000000024A9B88>
133 _prefix B
134 _get_normal_name <function _get_normal_name at 0x00000000024A9F78>
135 _tokenize <function _tokenize at 0x00000000024B11F8>

剩余

136 loader <_frozen_importlib_external.SourceFileLoader object at 0x00000000024998C8>
137 spec ModuleSpec(name=‘tokenize’, loader=<_frozen_importlib_external.SourceFileLoader object at 0x00000000024998C8>, origin=‘…\lib\tokenize.py’)
138 BOM_UTF8 b’\xef\xbb\xbf’
139 cookie_re re.compile(’ ^ [ \t\f]#.?coding[:=][ \t]([-\w.]+)‘, re.ASCII)
140 blank_re re.compile(b’^ [ \t\f]
(?:[#\r\n]|$)', re.ASCII)

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AhcaoZhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值