该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) 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) 我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 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()它是如何工作的,现在我可以看出为什么它正在做它正在做的事情(见下面我选择的答案).
该实用程序which会在路径上找到一个程序,但是任意数据文件呢?
我一定是在寻找错误的东西,但我找不到任何使用标准实用程序来做到这一点的方法,所以我想写一个小 Bash 脚本来做到这一点。
该$PATH环境变量由冒号分隔,但试图设置IFS=':',然后遍历结果是不是为我工作。这是我到目前为止所得到的:
IFS=':' DIRS=($PATH)
for d in $DIRS; do echo $d; done
Run Code Online (Sandbox Code Playgroud)
此时它只输出我路径中的第一个条目,而不是所有条目。
想法?如果已经有执行此操作的标准命令,则没有理由编写脚本......
我有一个客户端 ID 和客户端密钥,用于 Django 应用程序中的一些基于 Google 的身份验证。如何使用此信息获取正在使用的实际 Google 项目名称/ID?
使用 API 固然很棒,但我也不愿意点击一些 Web UI。
PS——我不确定如何标记/分类这个问题,所以我很感谢那里的任何帮助。
简短版本:我想从结果中取出最后两个组件,readlink -f并使用单行BASH脚本将其存储在变量中.
长版本:我想要一行BASH脚本来JAVA_HOME为EC2命令行工具设置变量.此变量存储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不起作用).