小编Mad*_*ist的帖子

如何在Python中获取绝对文件路径

给定一个路径"mydir/myfile.txt",如何在Python中找到相对于当前工作目录的文件的绝对路径?例如在Windows上,我最终可能会:

"C:/example/cwd/mydir/myfile.txt"
Run Code Online (Sandbox Code Playgroud)

python path relative-path absolute-path

653
推荐指数
9
解决办法
77万
查看次数

在python中读取文件的前N行

我们有一个大的原始数据文件,我们想要修剪到指定的大小.我在.net c#中很有经验,但是想在python中做这件事来简化事情并且没有兴趣.

我如何在python中获取文本文件的前N行?使用的操作系统会对实施产生影响吗?

python file head

140
推荐指数
6
解决办法
22万
查看次数

使用子进程获取实时输出

我正在尝试为命令行程序(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 subprocess

124
推荐指数
8
解决办法
9万
查看次数

是否使用-m选项执行Python代码

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__模块内执行".这是什么意思?

python module package

87
推荐指数
3
解决办法
6万
查看次数

从子进程实时捕获stdout

我想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)

python subprocess stdout

74
推荐指数
9
解决办法
10万
查看次数

Java的命名约定是什么意思?

正如我们可以在Java 8看到,有许多方法"的",像命名Stream.of(),Optional.of()等等,许多图书馆actorOf在阿卡.

这个"的"是什么意思?它是英文单词"of"还是像"Object Factory"这样的缩写?

java

68
推荐指数
3
解决办法
7238
查看次数

Makefile:包含字符串

变量返回MINGW32_NT-5.1CYGWIN_NT-5.1.(是,最后点)

需要比较给定的var包含NT-5.1位于任何地方.

使用cygwin并希望与几乎任何*nix兼容.

string makefile conditional-statements

65
推荐指数
2
解决办法
5万
查看次数

Linux:查找给定"原始"文件的所有符号链接?(反向'readlink')

请考虑以下命令行代码段:

$ 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)

linux bash symlink reverse

49
推荐指数
3
解决办法
5万
查看次数

为什么以及如何使用Python函数?

我最近在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__方法是为lambdas 显式定义的,即,这不是Python根据类型计算的一些自动化的东西.

使功能可以清洗的动机是什么?对于奖金,函数的哈希是什么?

python hash

49
推荐指数
2
解决办法
4597
查看次数

如何在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

有任何想法吗?另外,如果你能指出一个很好的教程,那就太好了!

谢谢!

python inheritance list

47
推荐指数
3
解决办法
4万
查看次数