小编Nei*_*ski的帖子

如何从CSV的任意BZ2流中读取行?

bz2模块提供了open()一种可以从中调用的标准方法readline()。但是,我的情况是我有一个流(指向大量数据)想要动态解压缩行。我当前的实现如下,但是我知道必须有一种更简洁的方法来实现。

import bz2
import csv

BZ2_BUFFER = ''

BZ2_DECOMPRESSOR = None

BZ2_FILE = None

BZ2_READ_SIZE = 100 * 1024


def bz2_csv_rows(fp):
    global BZ2_BUFFER, BZ2_DECOMPRESSOR, BZ2_FILE, BZ2_READ_SIZE

    BZ2_BUFFER = ''
    BZ2_DECOMPRESSOR = bz2.BZ2Decompressor()
    BZ2_FILE = fp

    for row in csv.reader(iter(bz2_line_reader, b'')):
        yield row


def bz2_line_reader():
    global BZ2_BUFFER, BZ2_DECOMPRESSOR, BZ2_FILE, BZ2_READ_SIZE

    if BZ2_BUFFER is None:
        return None

    while '\n' not in BZ2_BUFFER:
        bindata = BZ2_FILE.read(BZ2_READ_SIZE)

        try:
            data = BZ2_DECOMPRESSOR.decompress(bindata)
        except EOFError:
            break
        except IOError:
            pass

        BZ2_BUFFER …
Run Code Online (Sandbox Code Playgroud)

python csv python-2.7 bz2

4
推荐指数
1
解决办法
693
查看次数

内置 round() 的替代方法是什么?

Pylint 抱怨内置引用,但有什么替代方法?

到目前为止,我所看到答案只是让 Pylint 在内置函数方面保持安静。必须有其他调用方式round(),也许在标准导入库中?使用内置函数有什么潜在问题吗?

我对这些答案的搜索只提供了几十个关于使用内置函数的教程。

用法与 with 无关round()。这会触发警告:

n = 0.05
n = round(n)
Run Code Online (Sandbox Code Playgroud)

确切的警告只出现在 VS Code 中,它是:

{
    "resource": "/C:/Users/neil.obremski/project/file.py",
    "owner": "python",
    "code": "round-builtin",
    "severity": 4,
    "message": "round built-in referenced",
    "source": "pylint",
    "startLineNumber": 434,
    "startColumn": 9,
    "endLineNumber": 434,
    "endColumn": 9
}
Run Code Online (Sandbox Code Playgroud)

更新:这--enable=W会在 Pylint 参数中设置时显示。它绝对适用于该函数的任何使用round(),包括指定第二个参数。

这是 Pylint 输出的样子pylint file.py --enable=W

file.py:435:18: W1633: round built-in referenced (round-builtin)
Run Code Online (Sandbox Code Playgroud)

python pylint python-3.x

4
推荐指数
1
解决办法
2356
查看次数

如何在没有独占锁的情况下使用FileStream附加到文件?

FileStream在C#/ .NET中尝试做的是打开两个流:一个附加到文件,另一个异步读取这些写入(用于单元测试一些网络连接处理代码).我无法弄清楚如何让作家流开在非EXLUSIVE锁定模式的文件,因此代码总是抛出一个异常:

该进程无法访问文件'C:\ test.txt',因为它正由另一个进程使用.

这里有一些代码可以证明这个问题:

FileStream fwriter = new FileStream("C:\\test.txt", FileMode.Append,
    FileAccess.Write, FileShare.Read);
FileStream freader = new FileStream("C:\\test.txt", FileMode.Open,
    FileAccess.Read, FileShare.Read);
Run Code Online (Sandbox Code Playgroud)

.net c# file stream filestream

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

闰年bug调用ToUniversalTime().AddYears().ToLocalTime()?

特别是,我遇到了.NET DateTime处理的闰年ToLocalTime().这里有一些代码可以重现问题(我在太平洋时区):

DateTime dtStartLocal = DateTime.Parse("2009-02-28T23:00:00.0-08:00");
DateTime dtEndLocal = dtStartLocal.AddYears(3);
DateTime dtStartUtc = dtStartLocal.ToUniversalTime();
DateTime dtEndUtc = dtStartUtc.AddYears(3);
DateTime dtEndLocal2 = dtEndUtc.ToLocalTime();
DateTime dtStartLocal2 = dtStartUtc.ToLocalTime();
Console.WriteLine("START: 1={0}, 2={0}", dtStartLocal, dtStartLocal2);
Console.WriteLine("END  : 1={0}, 2={1}", dtEndLocal, dtEndLocal2);
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

输出是:

START:1 = 2/28/2009 11:00:00 PM,2 = 2/28/2009 11:00:00 PM
END:1 = 2/28/2012 11:00:00 PM,2 = 2/29/2012 11:00:00 PM

注意我所做的变量ToUniversalTime().AddYears(3).ToLocalTime()不仅仅是AddYears(3),它提前了一天.

有没有遇到过这个?如果这是预期的,有人可以解释它背后的逻辑吗?

注意:是的,最好的方法是完全使用UTC,而不是在它们之间翻转.这不是影响我的东西,而是我遇到的一种特殊性.基本上我误解了AddYears()它是如何工作的,现在我可以看出为什么它正在做它正在做的事情(见下面我选择的答案).

.net c# datetime leap-year

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

如何在 Bash 中的 $PATH 上找到文件?

该实用程序which会在路径上找到一个程序,但是任意数据文件呢?

我一定是在寻找错误的东西,但我找不到任何使用标准实用程序来做到这一点的方法,所以我想写一个小 Bash 脚本来做到这一点。

$PATH环境变量由冒号分隔,但试图设置IFS=':',然后遍历结果是不是为我工作。这是我到目前为止所得到的:

IFS=':' DIRS=($PATH)
for d in $DIRS; do echo $d; done
Run Code Online (Sandbox Code Playgroud)

此时它只输出我路径中的第一个条目,而不是所有条目。

想法?如果已经有执行此操作的标准命令,则没有理由编写脚本......

bash posix path

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

从客户端 ID + 秘密获取 Google 项目 ID?

我有一个客户端 ID 和客户端密钥,用于 Django 应用程序中的一些基于 Google 的身份验证。如何使用此信息获取正在使用的实际 Google 项目名称/ID?

使用 API 固然很棒,但我也不愿意点击一些 Web UI。

PS——我不确定如何标记/分类这个问题,所以我很感谢那里的任何帮助。

google-authentication google-cloud-platform

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

如何在BASH脚本中删除路径?

简短版本:我想从结果中取出最后两个组件,readlink -f并使用单行BASH脚本将其存储在变量中.

长版本:我想要一行BASH脚本来JAVA_HOMEEC2命令行工具设置变量.此变量存储Java 主目录的位置.使用以下我可以获得java二进制文件的绝对路径:

$ readlink -f $(which java)
Run Code Online (Sandbox Code Playgroud)

在我的测试机器上,这输出:

/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
Run Code Online (Sandbox Code Playgroud)

这是完美的,除了我需要砍掉"/ bin/java".我可以使用字符串替换在我的配置文件中这样做:

JAVA_HOME=$(readlink -f $(which java))
export JAVA_HOME="${JAVA_HOME%/*/*}"
Run Code Online (Sandbox Code Playgroud)

编辑:现在唯一的问题是它是两行.我接受了下面的答案,它使它成为一个,但它仍然只适用于Linux,而在OS X上,必须./Commands/java_home从此运行才能获得真正的目录.

额外的功劳:让它在OS X上工作(哪里readlink -f不起作用).

linux bash

0
推荐指数
1
解决办法
469
查看次数