没有项目描述

fx-kirin的Python项目详细描述


这是由stedolan/pathfinder派生的

==


python的标准库包含许多用于处理
文件的模块。讽刺的是,这些都不是特别的"蟒蛇"。

有操作系统,它可以创建、删除和移动
文件。要复制它们,您需要shuil的copy或copy2(当然,略有不同)。要列出文件,可以使用os或glob
模块。您可以使用os.stat获取文件元数据,但必须使用完全不同的模块来解释其结果。

Pathfinder使用这些标准模块创建一个库,无需不断参考文档即可使用该库。

我使用的是发行版的"一个巨大的文件"方法,因此您可以将pathfinder.py放在方便的地方安装它。很快就会有一个合适的pip包了!

目前都有点Unix的味道。它位于python提供的
跨平台原语之上,因此它应该或多或少地在windows上工作,但这还没有经过测试。

pathfinder是在mit许可下获得许可的。


paths
=


"path"表示一个文件,它可能存在,也可能不存在。

>;>;p=路径('/home/stephen/coding/pathfinder/pathfinder.py')


如果p.存在,您可以对路径对象执行很多操作

>;
…打印p.owner,p.last_modify_time
Stephen 2012-02-12 15:40:20.328579

er'
<;directory"/home/stephen/coding/pathfinder">;
>;>print p/'pathfinder'/'pathfinder.py'
<;file"/home/stephen/coding/pathfinder/pathfinder.py">;

'/'解释相对于第一个参数的第二个参数,因此

>;path('/home/stephen')/'coding/pathfinder'
<;directory"/home/stephen/coding/pathfinder">;
>;>;路径('/home/stephen')/'/etc/passwd'
<;文件"/etc/passwd">;


'%'是它的逆路径,并将第一个路径作为第二个路径的相对路径提供给您。
/>
>;>;路径('/home/stephen/coding/pathfinder')%'/home/stephen'
<;目录"编码/探路者">;
>;>;路径('/home/stephen/coding/pathfinder')%'/etc'
<;目录'../home/stephen/coding/pathfinder'>;

一个只需遍历对象的目录。

>;>;对于f in p:
…打印f.basename
.git
.gitignore
readme.markdown
readme.markdown~
pathfinder.py
pathfinder.py~
pathfinder.pyc


,或使用更高级的"查找"方法(见下文)来查找p.find中的f。/>…排除=["*~","*.pyc",".git"],
…ignore_case=true):
pathfinder.py






操作文件系统




path.last_modify_time返回实际的python datetime对象。对于
symlinks,path.link_target显示它们指向的位置,并且
path.final_link_target遵循到达
symlinks链末端所需的许多步骤。

>;>;如果path('readme.markdown')。比(path('pathfinder.py')更新的路径:
…打印"不管你刚才做了什么,记录下来!"

您可以使用path.mkdir()、path.symlink()、
path.chown()和friends修改文件系统。path.chown可用于更改用户或
grOUP或两者都有,并采用数字标识或名称。

>;>p.chown(user="stephen",group="stephen")



unix权限
----


'.owner''和'.group''将文件的所有者和组指定为
字符串(使用'.owner''uid'')和('.group''uid"")对于数字标识。

>;>;路径('/etc/passwd')。group
'root'

'.perms'将在特定的
路径授予文件的Unix权限。

>;>;路径('/etc/passwd')。perms
<;0644-rw-r-->;

perms。用户将限制show只有用户权限,perms.write
只有写权限,依此类推。因此,我们可以在"/bin"中找到所有
world可执行setuid根程序,其中:

>;[f代表f in path('/bin')
if f.perms.world.execute和f.perms.setuid和f.owner=='root']
[<;file"/bin/ping6">;,
<;file"/bin/fusermount">;,
<;文件"/bin/su">;,
<;文件"/bin/mount">;,
<;文件"/bin/umount">;,
<;文件"/bin/ping">;]





> gt;gt;p=路径("myfile")
>;gt;p.contents="看着我!我是档案!"
>>>打印p.内容
看看我!我是档案!

您也可以按照传统的路径打开文件:

>;>f=path('myfile').open("r")


它实现了
标准的python文件方法(因此您可以将其传递给
需要"类似文件的对象"的对象)。

>>>>打印f[0:5]
"你好"
>;>f[6:11]="再次"
>;>打印f[:]
"再次你好"






原子更新
----

创建一个新文件,写入该文件,然后将其名称更改为目标文件名并替换原始文件名。在
unix-y系统上,这保证是原子的:任何其他程序都将看到
整个旧文件或整个新文件,而不是
半写文件或丢失的文件。

在文件移动的瞬间,y可能会在
中观察到丢失的文件。

写('许多有趣的数据')
…f.write('和更多的')

"f"将指向与"mypath"
在同一目录中的临时文件,并且在"with"语句的末尾,新文件将替换
旧文件。如果WITH语句中的代码抛出异常,或者
python进程神秘地终止,那么旧文件将保持完整。



s.path.walk.

>;>p=path('/home/stephen/coding')
>;>p.find(include=["*.py","docs/**/*.html"],
exclude=".git",
visit\u dirs="before",
忽略大小写=true,
最大深度=3)

*include指定要搜索的内容,作为字符串
模式的列表。模式可以包含通配符:"?"匹配任意
单个字符,"\*"任意字符序列和"\*\*"任意
目录序列。所以,PA"coding/\*/\*.html"匹配
"coding/project1/info.html",而不是"coding/project1/docs/help.html",而"coding/\*/\*.html"匹配两者。模式也可以指定为可调用的
,这将被调用以确定文件是否值得返回。如果只有一个模式,则无需传入
列表。

*exclude与此基本相同,但指定了要避免的路径。排除的路径
甚至不会递归到中。

*访问目录可以是"before"、"after"或false,并指定
目录是在其内容之前还是之后返回,还是不在
all处返回。

*忽略大小写和最大深度应该相当清楚。:)

find返回生成路径对象的迭代器。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaSpringMVC控制器测试打印结果JSON字符串   若catch语句返回,那个么为什么它最终会阻塞呢?   java Grails中servletContext在哪里可用?   java Jhipster:如何为现有项目启用多种语言   java异常评估SpringEL表达式:“#fields.hasErrors('something')”   java如何验证SeleniumWebDriver中的文本颜色?   java在绘图时使用JPanel坐标   java如何初始化spring启动到project?   java如何通过JDBC的PreparedStatement将UUID数组插入HyperSQL数据库   java修改JVM以跨线程序列化文件访问   Javascript到Java正则表达式   使用Java运行时调用aspell程序时出现字符集问题。getRuntime()。执行官   执行RDP时的java Sukuli按钮识别   java如何使用okhttp更改connect请求的标头   java无法创建Maven Eclipse项目