小编tom*_*sen的帖子

从文件生成直方图

如果输入文件每行包含一个单独的数字,我怎样才能计算该文件中项目发生的次数?

cat input.txt
1
2
1
3
1
0
Run Code Online (Sandbox Code Playgroud)

期望的输出(=> [1,3,1,1]):

cat output.txt
0 1
1 3
2 1
3 1
Run Code Online (Sandbox Code Playgroud)

如果解决方案也可以扩展为浮动数字,那将会很棒.

bash shell awk file

41
推荐指数
2
解决办法
4万
查看次数

在gnuplot中循环遍历数组

这个问题与gnuplot内部的循环结构有关吗?答案也由DarioP.

gnuplot 4.6引入了do命令.我如何使用它来循环一个例如文件和颜色的数组?什么是正确的语法?

colors = "red green #0000FF"
files = "file1 file2 file3"

do for [i=1:3] {
  plot files(i).".dat" lc colors(i)
}
Run Code Online (Sandbox Code Playgroud)

arrays loops for-loop gnuplot

26
推荐指数
1
解决办法
2万
查看次数

在Python中进行刷新时如何防止BrokenPipeError?

问题:有没有办法使用flush=Trueprint()功能而无法获得BrokenPipeError

我有一个脚本pipe.py:

for i in range(4000):
    print(i)
Run Code Online (Sandbox Code Playgroud)

我从Unix命令行这样称呼它:

python3 pipe.py | head -n3000
Run Code Online (Sandbox Code Playgroud)

它返回:

0
1
2
Run Code Online (Sandbox Code Playgroud)

这个脚本也是如此:

import sys
for i in range(4000):
    print(i)
    sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此脚本并将其传递给head -n3000:

for i in range(4000):
    print(i, flush=True)
Run Code Online (Sandbox Code Playgroud)

然后我收到这个错误:

    print(i, flush=True)
BrokenPipeError: [Errno 32] Broken pipe
Exception BrokenPipeError: BrokenPipeError(32, 'Broken pipe') in <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> ignored
Run Code Online (Sandbox Code Playgroud)

我也试过下面的解决方案,但我仍然得到BrokenPipeError:

import sys
for i in range(4000):
    try:
        print(i, flush=True)
    except BrokenPipeError:
        sys.exit()
Run Code Online (Sandbox Code Playgroud)

python unix flush broken-pipe python-3.x

26
推荐指数
3
解决办法
2万
查看次数

argparse参数依赖

如果我使用以下选项调用下面的脚本:

--user u1 --password p1 --foo f1   --user u2   --user u3 --password p3
Run Code Online (Sandbox Code Playgroud)

然后它将打印:

Namespace(foo=['bar', 'f1'], password=['p1', 'p3'], user=['u1', 'u2', 'u3'])
Run Code Online (Sandbox Code Playgroud)

问题:我有没有办法在用户和密码之间建立依赖关系,因此会抛出错误,因为没有指定用户u2的密码?

不太相关的问题:如何为所有用户指定默认的foo值?对于给定的输入,我希望foo等于['f1','bar','bar'].

我的主要问题的解决方案是检查列表用户和密码是否具有相同的长度,但它不是我正在寻找的.

这是脚本:

import argparse
parser = argparse.ArgumentParser()
group = parser.add_argument_group('authentication')
group.add_argument('--user', action='append', required=True)
group.add_argument('--password', action='append', required=True)
group.add_argument('--foo', action='append', default=['bar'])
print(parser.parse_args())
Run Code Online (Sandbox Code Playgroud)

python argparse python-3.x

14
推荐指数
1
解决办法
2万
查看次数

使用双三次插值的颜色matplotlib地图

我知道,matplotlib和SciPy的可以做双三次插值: http://matplotlib.org/examples/pylab_examples/image_interp.html http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html HTTP:/ /docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html

我也知道,它可以绘制一张世界地图与matplotlib的: http://matplotlib.org/basemap/users/geography.html http://matplotlib.org/basemap/users/examples.html HTTP:/ /matplotlib.org/basemap/api/basemap_api.html

但是我可以根据4个数据点进行双三次插值并仅对地块进行着色吗?

例如,将这些用于4个数据点(经度和纬度)和颜色:

Lagos: 6.453056, 3.395833; red HSV 0 100 100 (or z = 0)
Cairo: 30.05, 31.233333; green HSV 90 100 100 (or z = 90)
Johannesburg: -26.204444, 28.045556; cyan HSV 180 100 100 (or z = 180)
Mogadishu: 2.033333, 45.35; purple HSV 270 100 100 (or z = 270)
Run Code Online (Sandbox Code Playgroud)

我认为必须能够在纬度和经度范围内进行双三次插值,然后在该层顶部添加海洋,湖泊和河流?我可以这样做drawmapboundary.实际上有一个选项maskoceans:http: //matplotlib.org/basemap/api/basemap_api.html#mpl_toolkits.basemap.maskoceans

我可以像这样插入数据:

xnew, ynew = np.mgrid[-1:1:70j, -1:1:70j]
tck = interpolate.bisplrep(x, y, z, s=0) …
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib scipy matplotlib-basemap

13
推荐指数
1
解决办法
1439
查看次数

使用生成器来编写文件的标题和正文是pythonic吗?

如果我要用这个内容写一个文件:

#You have been defeated!
#It's merely a flesh wound!
We are the knights who say Ni!
We are the knights who say Ni!
We are the knights who say Ni!
Run Code Online (Sandbox Code Playgroud)

那么用发送器使用发送器来做它会非常非pythonic吗?我从未见过其他地方使用的发电机.

def write(file, header):

    with open(file,'w') as f:
        f.write(header)
        line = (yield)
        while True:
            f.write(line)
            line = (yield)

    return

file='holygrail.txt'
header="#You have been defeated!\n#It's merely a flesh wound!\n"
generator = write(file,header)
generator.send(None)
for i in range(3):
    generator.send('We are the knights who say Ni!\n')
generator.close()
Run Code Online (Sandbox Code Playgroud)

我问,因为上面的方法对我非常有益,而不是在contextlib堆栈中打开多个不同的文件流.如果我像这样写我的文件,我根本不必使用contextlib模块.

我之前从未问过这样的问题,我不知道它是否属于stackoverflow.

python file-io generator send python-3.x

11
推荐指数
1
解决办法
285
查看次数

gnuplot,隐藏默认xtics,添加xtics

我试图从一个图(文本标签和小垂直线)中删除xtics并替换为我自己的自定义xtics(标签垂直线).我可以添加文本标签和箭头而不是xtics(http://gnuplot.sourceforge.net/demo/textrotate.html),但必须有一个更简单的解决方案.

我试过这个:

unset xtics
set xtics format ""
set xtics scale 0
set xtics add ("someTicLabel1" someFloat1)
set xtics add ("someTicLabel2" someFloat2)
Run Code Online (Sandbox Code Playgroud)

它摆脱了默认的xtics标签,但保留了xtic垂直线.我怎么摆脱他们?

plot gnuplot

7
推荐指数
1
解决办法
1万
查看次数

gnuplot和bash进程替换

gnuplot是否允许bash进程替换?

在gnuplot我可以这样做:

plot "<join tmp1 tmp2" u 2:3
Run Code Online (Sandbox Code Playgroud)

但我不能让这个工作:

plot "<join tmp1 <(join tmp2 tmp3)" u 2:3
Run Code Online (Sandbox Code Playgroud)

它应该工作,还是gnuplot不支持bash进程替换?

以下是3个示例输入文件:

猫tmp1

A 1
B 2
C 3
Run Code Online (Sandbox Code Playgroud)

猫tmp2

B 3
C
D 6
Run Code Online (Sandbox Code Playgroud)

猫tmp3

A 4
B 6
C 8
D 10
E 12
Run Code Online (Sandbox Code Playgroud)

bash gnuplot process

5
推荐指数
1
解决办法
883
查看次数

python gzipped fileinput返回二进制字符串而不是文本字符串

当我使用模块fileinput循环遍历一组gzip压缩文件的行时,如下所示:

for line in fileinput.FileInput(files=gzipped_files,openhook=fileinput.hook_compressed):
Run Code Online (Sandbox Code Playgroud)

那些行是字节字符串而不是文本字符串.

当使用模块gzip时,可以通过使用'rt'而不是'rb'打开文件来防止这种情况:http://bugs.python.org/issue13989

模块fileinput是否有类似的修复,所以我可以让它返回文本字符串而不是字节字符串?我尝试添加mode ='rt',但后来我收到此错误:

ValueError: FileInput opening mode must be one of 'r', 'rU', 'U' and 'rb'
Run Code Online (Sandbox Code Playgroud)

python string file-io gzip python-3.x

5
推荐指数
1
解决办法
807
查看次数

使用 Python 模块 fileinput 读取多个二进制文件的各个字节

我可以像这样读取二进制文件的第一个字节:

with open(my_binary_file,'rb') as f:
    f.read(1)
Run Code Online (Sandbox Code Playgroud)

但是我该如何使用 fileinput 模块来做到这一点呢?如果我运行这段代码:

import fileinput
with fileinput.FileInput(my_binary_file,'rb') as f:
    f.read(1)
Run Code Online (Sandbox Code Playgroud)

然后我得到这个错误:

AttributeError: 'FileInput' object has no attribute 'read'
Run Code Online (Sandbox Code Playgroud)

是否有类似于 fileinput 的模块,它允许我读取多个二进制文件的字节/字符而不是行?

编辑:读取二进制文件的一行并循环它不是一个选项,因为二进制文件很大并且不包含换行符。

python file-io binaryfiles python-3.x

5
推荐指数
1
解决办法
1638
查看次数