- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我在 Linux 中对一个文件(一个几百万行的 CSV 文件)执行 wc -l
时,它报告的行数低于此 Python 代码显示的行数(简单地迭代超过文件中的行)超过一千。那会是什么原因呢?
with open(csv) as csv_lines:
num_lines = 0
for line in csv_lines:
num_lines += 1
print(num_lines)
我遇到过 wc
报告比上面少一个的情况,这在文件没有终止换行符的情况下是有意义的,因为它看起来像 wc
计算完整行(包括终止换行符),而此代码仅计算任何行。但是相差一千多行会怎样呢?
我不太了解行尾之类的东西,所以也许我误解了 wc
和这个 Python 代码是如何计算行数的,所以也许有人可以澄清一下。在 linux lines counting not working with python code它说 wc
通过计算文件中 \n
字符的数量来工作。但是,这段 Python 代码到底在做什么?
有没有一种方法可以调和数字上的差异,从而找出究竟是什么原因造成的?就像一种从 Python 计算行数的方法,其计数方式与 wc
相同。
该文件可能是在与 Linux 不同的平台上生成的,不确定这是否相关。
最佳答案
由于您使用的是 print(num_lines)
我假设您使用的是 Python 3.x,我以 Python 3.4.2 为例。
行数不同的原因在于 open(<name>)
打开的文件两者都算 \r
和 \n
字符作为单独的行以及\r\n
组合( docs ,通用换行符 部分)。这导致以下情况:
>>> with open('test', 'w') as f:
f.write('\r\r\r\r')
>>> with open('test') as f:
print(sum(1 for _ in f))
4
同时 wc -l
给出:
$ wc -l test
0 test
\r
字符在旧的 Macintosh 系统中用作换行符。
如果您只想在 \n
上拆分字符,使用 newline
open
的关键字参数:
>>> with open('test', 'w') as f:
f.write('\r\r\r\r')
>>> with open('test', newline='\n') as f:
print(sum(1 for _ in f))
1
1
来自你已经提到的事实。没有一个\n
文件中的字符所以 wc -l
返回 0,Python 将其计为一行。
关于返回比 Linux `wc -l` 高得多的行数的 Python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27998980/
我有以下疑问。 wc -m 和 wc -c 总是给出相同的输出。我也尝试使用 float ,但两个命令的输出相同。 cat test | wc -m 541 cat test | wc -c
我正在尝试找出两者之间的区别 ps | wc 和 ps r | wc 最佳答案 在 Linux 中,| 管道字符将一个命令的输出发出到另一个命令的输入。在这种情况下,ps 输出将发送到 wc。因此,这
我正在编写一个 shell,目前正在执行管道进程。我能够运行 "ls -l | wc",但是当运行 "ls -l|wc" 时,进程失败。 我曾尝试使用 gdb 进行调试,但无法对其进行任何调试,因为它
这两个命令是$(git ls-files -s | wc -l)吗?和 $(git ls-files -s >out && wc -l out && wc -l out && wc -l <out
这个问题在这里已经有了答案: How can I use a file in a command and redirect output to the same file without trunc
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
谁能告诉我这是怎么回事?我仍然是 fork 新手。计算机执行第一个和第二个,但第三个即 wc 不起作用。非常需要帮助。终端返回多个子进程完成但没有wc。 pid_t son; int i; for (
我想在不使用wc的临时文件的情况下检查某个文件的行数。我尝试使用类似这样的东西:var=${wc -l a.txt} 或 wc -l a.txt |读取行 但两者都不起作用。 最佳答案 存储命令输出的
那一行是什么意思? ^-...------ | wc ... 它是 Bash 脚本的一部分。 最佳答案 试着写: ls -l | grep ^.......... | wc -l ls -l 的输出将
例如: myCleanVar=$( wc -l < myFile ) myDirtVar=$( wc -l myFile ) echo $myCleanVar 9 echo $myDirtVar 9
我想使用来自“wc”的行作为变量。例如: echo 'foo bar' > file.txt echo 'blah blah blah' >> file.txt wc file.txt 2 5 23
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
这个问题在这里已经有了答案: How can I use a file in a command and redirect output to the same file without trunc
我有一个包含未压缩文件和 gzip 文件的目录,我想在此目录上运行 wc -l。 wc 将为压缩文件提供一个不准确的行计数值(因为它似乎计算文件的 gzip 版本中的换行符)。有没有一种方法可以创建类
这个问题在这里已经有了答案: Whats is the behaviour of the "wc" command? (2 个答案) 关闭 6 年前。 我是 Linux/Unix 世界的新手,但发现
指定显示 .c 中代码行数的命令/命令集和 .h当前目录中的文件,按字母顺序显示每个文件,后跟:以及文件中的行数,最后是代码行数。 . 可能显示的示例是: main.c: 202 util.c: 12
我正在尝试运行这个脚本: #!/bin/sh cd $1 for i in */*.$2 do if [ 'wc –c $i' -gt $3 ] then chmod o-r
当我提交大量更改(数百兆字节)时,即使 checkin 确实通过,客户端也会超时。 当我右键单击 WC 并显示日志时,TSVN 显示即使 checkin 实际发生,WC 修订版也不会更新。 我已经尝试
我有几个从旧存储库中 check out 的工作副本。 旧存储库现在合并为一个新存储库,因此存储库名称和新存储库内的位置已更改。 现在我想将这些工作副本重新定位到新的存储库中的新位置。 使用 Tort
在 iOS 和 iWatch 设备之间建立连接,xCode 写入 [WC] WCSession 对应应用程序未安装。 经过大量研究,我找到了一个解决方案,也许它会对某人有所帮助。 - Check yo
我是一名优秀的程序员,十分优秀!