给定一个路径"mydir/myfile.txt"
,如何在Python中找到相对于当前工作目录的文件的绝对路径?例如在Windows上,我最终可能会:
"C:/example/cwd/mydir/myfile.txt"
Run Code Online (Sandbox Code Playgroud) 我们有一个大的原始数据文件,我们想要修剪到指定的大小.我在.net c#中很有经验,但是想在python中做这件事来简化事情并且没有兴趣.
我如何在python中获取文本文件的前N行?使用的操作系统会对实施产生影响吗?
我正在尝试为命令行程序(svnadmin verify)编写一个包装器脚本,它将为操作显示一个很好的进度指示器.这要求我能够在输出后立即查看包装程序的每一行输出.
我想我只是执行程序使用subprocess.Popen
,使用stdout=PIPE
,然后读取每一行,并相应地对其进行操作.但是,当我运行以下代码时,输出似乎在某处缓冲,导致它出现在两个块中,第1行到第332行,然后是333到439(输出的最后一行)
from subprocess import Popen, PIPE, STDOUT
p = Popen('svnadmin verify /var/svn/repos/config', stdout = PIPE,
stderr = STDOUT, shell = True)
for line in p.stdout:
print line.replace('\n', '')
Run Code Online (Sandbox Code Playgroud)
稍微查看子进程的文档后,我发现bufsize
参数为Popen
,所以我尝试将bufsize设置为1(缓冲每行)和0(无缓冲区),但这两个值似乎都没有改变行的传递方式.
此时我开始掌握吸管,所以我编写了以下输出循环:
while True:
try:
print p.stdout.next().replace('\n', '')
except StopIteration:
break
Run Code Online (Sandbox Code Playgroud)
但得到了相同的结果.
是否有可能获得使用子进程执行的程序的"实时"程序输出?Python中是否有其他选项可以向前兼容(不是exec*
)?
python解释器具有-m
模块选项"将库模块模块作为脚本运行".
使用此python代码a.py:
if __name__ == "__main__":
print __package__
print __name__
Run Code Online (Sandbox Code Playgroud)
我测试python -m a
得到了
"" <-- Empty String
__main__
Run Code Online (Sandbox Code Playgroud)
而python a.py
回报
None <-- None
__main__
Run Code Online (Sandbox Code Playgroud)
对我来说,这两个调用似乎是相同的,除非__package__在使用-m选项调用时不是None.
有趣的是,python -m runpy a
我得到了与python -m a
编译的python模块相同的a.pyc.
这些调用之间的(实际)区别是什么?他们之间有什么利弊?
此外,David Beazley的Python Essential Reference将其解释为"-m选项将库模块作为脚本运行,该脚本在执行主脚本之前在__main__模块内执行".这是什么意思?
我想subprocess.Popen()
在Windows中使用rsync.exe,并在Python中打印stdout.
我的代码有效,但在文件传输完成之前它没有抓住进度!我想实时打印每个文件的进度.
现在使用Python 3.1,因为我听说它应该更好地处理IO.
import subprocess, time, os, sys
cmd = "rsync.exe -vaz -P source/ dest/"
p, line = True, 'start'
p = subprocess.Popen(cmd,
shell=True,
bufsize=64,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
for line in p.stdout:
print(">>> " + str(line.rstrip()))
p.stdout.flush()
Run Code Online (Sandbox Code Playgroud) 正如我们可以在Java 8看到,有许多方法"的",像命名Stream.of()
,Optional.of()
等等,许多图书馆actorOf
在阿卡.
这个"的"是什么意思?它是英文单词"of"还是像"Object Factory"这样的缩写?
变量返回MINGW32_NT-5.1
或CYGWIN_NT-5.1.
(是,最后点)
需要比较给定的var包含NT-5.1
位于任何地方.
使用cygwin并希望与几乎任何*nix兼容.
请考虑以下命令行代码段:
$ cd /tmp/
$ mkdir dirA
$ mkdir dirB
$ echo "the contents of the 'original' file" > orig.file
$ ls -la orig.file
-rw-r--r-- 1 $USER $USER 36 2010-12-26 00:57 orig.file
# create symlinks in dirA and dirB that point to /tmp/orig.file:
$ ln -s $(pwd)/orig.file $(pwd)/dirA/
$ ln -s $(pwd)/orig.file $(pwd)/dirB/lorig.file
$ ls -la dirA/ dirB/
dirA/:
total 44
drwxr-xr-x 2 $USER $USER 4096 2010-12-26 00:57 .
drwxrwxrwt 20 root root 36864 2010-12-26 00:57 ..
lrwxrwxrwx 1 $USER …
Run Code Online (Sandbox Code Playgroud) 我最近在Python中尝试了以下命令:
>>> {lambda x: 1: 'a'}
{<function __main__.<lambda>>: 'a'}
>>> def p(x): return 1
>>> {p: 'a'}
{<function __main__.p>: 'a'}
Run Code Online (Sandbox Code Playgroud)
两个dict
创作的成功表明lambda和常规函数都是可清除的.(像{[]: 'a'}
失败的东西TypeError: unhashable type: 'list'
).
哈希显然不一定是函数的ID:
>>> m = lambda x: 1
>>> id(m)
140643045241584
>>> hash(m)
8790190327599
>>> m.__hash__()
8790190327599
Run Code Online (Sandbox Code Playgroud)
最后一个命令显示该__hash__
方法是为lambda
s 显式定义的,即,这不是Python根据类型计算的一些自动化的东西.
使功能可以清洗的动机是什么?对于奖金,函数的哈希是什么?
我有兴趣使用python列表对象,但功能稍有改动.特别是,我希望列表是1索引而不是0索引.例如:
>> mylist = MyList()
>> mylist.extend([1,2,3,4,5])
>> print mylist[1]
Run Code Online (Sandbox Code Playgroud)
输出应为:1
但是,当我改变了__getitem__()
和__setitem__()
方法,要做到这一点,我得到一个RuntimeError: maximum recursion depth exceeded
错误.我对这些方法进行了很多修改,但这基本上就是我在那里所做的:
class MyList(list):
def __getitem__(self, key):
return self[key-1]
def __setitem__(self, key, item):
self[key-1] = item
Run Code Online (Sandbox Code Playgroud)
我想问题是它self[key-1]
本身正在调用它定义的相同方法.如果是这样,我如何使用list()
方法而不是MyList()
方法?我尝试使用super[key-1]
而不是self[key-1]
导致投诉TypeError: 'type' object is unsubscriptable
有任何想法吗?另外,如果你能指出一个很好的教程,那就太好了!
谢谢!