我目前正在用c ++编写一个程序,其中包括阅读大量的大文本文件.每行有~400.000行,极端情况下每行有4000或更多字符.仅供测试,我使用ifstream和cplusplus.com提供的实现读取其中一个文件.花了大约60秒,这太长了.现在我想知道,有没有一种直接的方法来提高阅读速度?
编辑:我使用的代码或多或少是这样的:
string tmpString;
ifstream txtFile(path);
if(txtFile.is_open())
{
while(txtFile.good())
{
m_numLines++;
getline(txtFile, tmpString);
}
txtFile.close();
}
Run Code Online (Sandbox Code Playgroud)
编辑2:我读的文件只有82 MB大.我主要说它可以达到4000,因为我认为可能有必要知道为了做缓冲.
编辑3:谢谢大家的答案,但考虑到我的问题似乎没有太大的改进空间.我必须使用readline,因为我想计算行数.将ifstream实例化为二进制文件也不会使读取速度更快.我将尝试尽可能地并行化它,至少应该起作用.
编辑4:显然我可以做一些事情.非常感谢你花了这么多时间,我非常感激!=)
我的目标是在Maven存储库中安装一个jar文件.这篇文章解释了如何使用MVN进行安装.
但是因为我在Eclipse中嵌入了Maven,所以我不知道在哪里运行以下命令:
mvn install:install-file -Dfile=C:\lib\rest\WadlGenerator.jar \
-DgroupId=foo.in.shop.rest.wadl \
-DartifactId=WadlGenerator \
-Dversion=1.0 \
-Dpackaging=jar \
-DlocalRepositoryPath=C:\maven\repositories\internal
Run Code Online (Sandbox Code Playgroud)
简而言之:如何识别Eclipse嵌入式Maven的Maven安装目录?
我在具有16GB Ram和64位操作系统的Linux机器上运行Python 2.7.我写的一个python脚本可以将太多的数据加载到内存中,这会使机器速度降低到我甚至无法再杀死进程的程度.
虽然我可以通过调用来限制内存:
ulimit -v 12000000
Run Code Online (Sandbox Code Playgroud)
在运行脚本之前的shell中,我想在脚本本身中包含一个限制选项.在我看的每个地方,该resource模块都被认为具有与之相同的能力ulimit.但是打电话:
import resource
_, hard = resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (12000, hard))
Run Code Online (Sandbox Code Playgroud)
在我的脚本开头做什么都没有.即使设置低至12000的值也从未使过程崩溃.我尝试了相同的RLIMIT_STACK,同样的结果.奇怪的是,打电话:
import subprocess
subprocess.call('ulimit -v 12000', shell=True)
Run Code Online (Sandbox Code Playgroud)
什么都不做.
我究竟做错了什么?我在网上找不到任何实际的用法示例.
编辑:对于任何好奇的人,使用subprocess.call不起作用,因为它创建一个(惊喜,惊喜!)新进程,它独立于当前python程序运行的进程.
Python 3.7即将到来,我想测试一些奇特的新dataclass+打字功能.使用本机类型和typing模块中的类型,可以很容易地获得正确工作的提示:
>>> import dataclasses
>>> import typing as ty
>>>
... @dataclasses.dataclass
... class Structure:
... a_str: str
... a_str_list: ty.List[str]
...
>>> my_struct = Structure(a_str='test', a_str_list=['t', 'e', 's', 't'])
>>> my_struct.a_str_list[0]. # IDE suggests all the string methods :)
Run Code Online (Sandbox Code Playgroud)
但是我想要尝试的另一件事是在运行时强制类型提示作为条件,即不应该dataclass存在具有不正确类型的类型.它可以很好地实现__post_init__:
>>> @dataclasses.dataclass
... class Structure:
... a_str: str
... a_str_list: ty.List[str]
...
... def validate(self):
... ret = True
... for field_name, field_def in self.__dataclass_fields__.items():
... actual_type = type(getattr(self, …Run Code Online (Sandbox Code Playgroud) 我在项目中使用带有wordnet的NLTK.我在我的PC上手动安装,使用pip:
pip3 install nltk --user在终端中,然后nltk.download()在python shell中下载wordnet.
我想用setup.py文件来创建它们,但我不知道安装wordnet的好方法.
目前,我在调用之后有这段代码setup.py("nltk"在setup调用列表中"nltk"):
import sys
if 'install' in sys.argv:
import nltk
nltk.download("wordnet")
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
pytest建议包含一个额外的目录来分隔项目中的源代码:
my_package
??? src # <-- no __init__.py on this layer
? ??? my_package
? ??? __init__.py
? ??? util_module
? ??? __init__.py
? ??? utils.py
??? tests
??? __init__.py
??? test_util_module
??? __init__.py
??? test_utils.py
Run Code Online (Sandbox Code Playgroud)
可悲的是,他们没有说1关于测试代码中的导入应该如何在这种情况下工作,这对于我的IDE在这个天真的例子2中工作得很好,但是导致pytest出现以下错误:
my_package $ pytest
====================== test session starts ======================
platform linux -- Python 3.6.4, pytest-3.5.1, py-1.5.3, pluggy-0.6.0
rootdir: /home/user/workspace/my_package, inifile:
collected 0 items / 1 errors
============================ ERRORS =============================
___ ERROR collecting tests/test_util_module/test_utils.py ___
ImportError while importing test …Run Code Online (Sandbox Code Playgroud) 我想更新数据类中的字段,但我仅在运行时而不是在开发期间知道字段名称。
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
from dataclasses import dataclass # I use the backport to 3.6
@dataclass
class Template:
number: int = 0
name: str = "^NAME^"
oneInstance = Template()
print(oneInstance) # Template(number=0, name='^NAME^')
# If I know the variable name during development, I can do this:
oneInstance.number=77
# I get this from a file during runtime:
para = {'name': 'Jones'}
mykey = 'name'
# Therefore, I used exec:
ExpToEval = "oneInstance." + mykey + ' = …Run Code Online (Sandbox Code Playgroud) 我开始大量使用 python dataclasses 模块并发现它非常有用。我特别喜欢可以在每个字段上设置的标志,允许切换比较、初始化等。
然而,我经常发现,有一个领域我希望从班级的沉迷行为中省略。在某些情况下,使用 dict_factory 参数可能会实现这一点,但有时,某个字段会导致 asdict 函数在通过使用 dict_factory 省略该字段之前引发异常。
其他人可以建议一种干净的方法来做到这一点吗?添加到数据类模块中不是一个有用的附加标志吗?
我想将自定义类包含到路线的响应中。我主要pydantic.BaseModel在应用程序中使用嵌套,因此最好返回整个内容,而无需编写从内部数据表示到路由返回内容的翻译。
只要继承自此的所有内容pydantic.BaseModel都是微不足道的,但我在后端使用的类Foo无法做到这一点,而且我也无法为此目的对其进行子类化。我可以以某种方式fastapi以接受该类的定义的方式鸭子类型吗?我现在所拥有的基本上是这样的:
主要.py
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Foo:
"""Foo holds data and can't inherit from `pydantic.BaseModel`."""
def __init__(self, x: int):
self.x = x
class Response(BaseModel):
foo: Foo
# plus some more stuff that doesn't matter right now because it works
@app.get("/", response_model=Response)
def root():
return Response(foo=Foo(1))
if __name__ == '__main__':
import uvicorn
uvicorn.run("main:app") # RuntimeError
Run Code Online (Sandbox Code Playgroud) 我是 github/gitlab 上托管的一个项目的维护者,该项目有许多贡献者。我想从 usingmaster作为默认分支迁移到main. 我该如何做到这一点而不搞砸?
我读过一些关于该主题的博客文章,但更喜欢在 StackOverflow 上进行讨论,其中评论可能会指出一个人可能忽略的问题。