相关疑难解决方法(0)

为什么在C++中读取stdin的行比Python要慢得多?

我想比较使用Python和C++从stdin读取字符串的读取行,并且看到我的C++代码运行速度比等效的Python代码慢一个数量级,这让我很震惊.由于我的C++生锈了,我还不是专家Pythonista,请告诉我,如果我做错了什么或者我是否误解了什么.


(TLDR回答:包括声明:cin.sync_with_stdio(false)或者只是fgets改用.

TLDR结果:一直向下滚动到我的问题的底部并查看表格.)


C++代码:

#include <iostream>
#include <time.h>

using namespace std;

int main() {
    string input_line;
    long line_count = 0;
    time_t start = time(NULL);
    int sec;
    int lps;

    while (cin) {
        getline(cin, input_line);
        if (!cin.eof())
            line_count++;
    };

    sec = (int) time(NULL) - start;
    cerr << "Read " << line_count << " lines in " << sec << " seconds.";
    if (sec > 0) {
        lps = line_count / sec;
        cerr << " LPS: " << lps …
Run Code Online (Sandbox Code Playgroud)

c++ python benchmarking iostream getline

1738
推荐指数
10
解决办法
25万
查看次数

计算CSV Python中有多少行?

我正在使用python(Django Framework)来读取CSV文件.如您所见,我只从这个CSV中拉出2行.我一直想做的是在变量中存储CSV的总行数.

如何获得总行数?

file = object.myfilePath
fileObject = csv.reader(file)
for i in range(2):
    data.append(fileObject.next()) 
Run Code Online (Sandbox Code Playgroud)

我试过了:

len(fileObject)
fileObject.length
Run Code Online (Sandbox Code Playgroud)

python csv count

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

你知道Windows上的wc(unix字数统计命令)类似的程序吗?

快速搜索给了我tawbaware wc,但它不接受stdout作为输入流,这意味着我不能在DOS会话中使用管道.

注意:

我无法安装cygwin或使用powershell(这将允许' |foreach-object {(get-content $_).count}')

unxutils和和的GnuWin32包可能有这个功能...

windows cmd

36
推荐指数
4
解决办法
5万
查看次数

如何使用python计算文本文件中的总行数

例如,如果我的文本文件是:

blue
green
yellow
black
Run Code Online (Sandbox Code Playgroud)

这里有四行,现在我想得到四个结果.我怎样才能做到这一点?

python file-io sum file

24
推荐指数
4
解决办法
12万
查看次数

(Python)尽可能快地计算巨大(> 10GB)文件中的行

我现在有一个非常简单的脚本,它使用以下方法计算文本文件中的行enumerate():

i = 0
f = open("C:/Users/guest/Desktop/file.log", "r")
for i, line in enumerate(f):
      pass
print i + 1
f.close()
Run Code Online (Sandbox Code Playgroud)

这需要大约3分半钟才能完成大约3000万行的15GB日志文件.如果我能在两分钟或更短的时间内得到它,那将是很好的,因为这些是每日日志,我们想要进行每月分析,因此代码必须处理30个~15GB的日志 - 可能超过一个半小时,我们希望尽量减少服务器上的时间和内存负载.

我也会接受一个很好的近似/估计方法,但它需要大约4 sig fig准确...

谢谢!

python enumerate line-count

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

csv文件中的行计数

我可能犯了一个愚蠢的错误,但我找不到它的位置.我想计算我的csv文件中的行数.我写了这个,显然不起作用:我row_count = 0应该是400.干杯.

f = open(adresse,"r")
reader = csv.reader(f,delimiter = ",")
data = [l for l in reader]
row_count = sum(1 for row in reader)

print row_count
Run Code Online (Sandbox Code Playgroud)

python csv row count

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

是否有可能加速python IO?

考虑这个python程序:

import sys

lc = 0
for line in open(sys.argv[1]):
    lc = lc + 1

print lc, sys.argv[1]
Run Code Online (Sandbox Code Playgroud)

在我的6GB文本文件上运行它,它在~2分钟内完成.

问题:是否有可能加快速度?

请注意,同一时间需要:

wc -l myfile.txt
Run Code Online (Sandbox Code Playgroud)

所以,我怀疑对我的问题的回答只是一个简单的"不".

另请注意,我的真实程序正在做一些比计算线条更有趣的事情,所以请给出一个通用答案,而不是行计数技巧(比如在文件中保留行数元数据)

PS:我在这个问题上标记了"linux",因为我只对linux特定的答案感兴趣.如果有的话,请随意提供与操作系统无关的内容,甚至是其他操作系统的答案.

另见后续问题

python linux performance text-files

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

高效地将最后'n'行CSV读入DataFrame

一些方法可以做到这一点:

  1. 阅读整个CSV然后使用 df.tail
  2. 以某种方式反转文件(对于大文件最好的方法是什么?)然后使用nrows参数来读取
  3. 以某种方式找到CSV中的行数,然后使用skiprows并读取所需的行数.
  4. 也许做块读取丢弃初始块(虽然不知道这将如何工作)

可以用更简单的方式完成吗?如果不是,应该优先考虑这三者中的哪一个?为什么?

可能相关:

  1. 有效地找到文本文件中的最后一行
  2. 使用pandas read_csv和nrows读取~13000行CSV文件的部分内容

没有直接关系:

  1. 如何获得最后一行pandas数据帧?

python csv numpy pandas

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

我应该如何获得dask数据帧的形状?

执行.shape会给我以下错误.

AttributeError:'DataFrame'对象没有属性'shape'

我应该如何获得形状呢?

python dask

10
推荐指数
3
解决办法
5256
查看次数

什么替代Python 3中的xreadlines()?

在Python 2中,文件对象有一个xreadlines()方法,它返回一个迭代器,一次读取一行文件.在Python 3中,xreadlines()方法不再存在,而realines()仍然返回一个列表(不是迭代器).Python 3有类似于xreadlines()的东西吗?

我知道我能做到

for line in f:
Run Code Online (Sandbox Code Playgroud)

代替

for line in f.xreadlines():
Run Code Online (Sandbox Code Playgroud)

但我还想使用没有for循环的xreadlines():

print(f.xreadlines()[7]) #read lines 0 to 7 and prints line 7
Run Code Online (Sandbox Code Playgroud)

python iterator readlines python-3.x

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