当前位置: 首页 > 知识库问答 >
问题:

python csv模块从头读取数据

马安邦
2023-03-14

我有以下格式的文件

# Data set number 1 
#
# Number of lines 4010
# Max number of column 3 is 5
# Blahblah
# More blahblah
1 2 1 110 
2 2 5 20 21 465 417 38
2 1 2 33 46 17
......
4010 3 5 1001 2010 3355 107 2039
# Data set number 2 
#
# Number of lines 4010
# Max number of column 3 is 5
# Blahblah
# More blahblah
1 2 1 110 
2 2 5 20 21 465 417 38
2 1 2 33 46 17
......
nnn = linecache.getline(filename, 1)
nnnn = nnn(line.split()[4])
number = linecache.getline(filename, 3)
number2 = number(line.split()[4])
mmm = linecache.getline(filename, 5)
mmmm = mmm(line.split()[7])
mmmmm = int(mmmm)
max_nb = range(mmmmm)
n_data = int(nnnn)
n_frame = range(n_data)
singleframe = natoms + 6

共有1个答案

蒋岳
2023-03-14

您并没有真正的CSV文件;您有一个专有的格式。只需直接解析它,使用正则表达式快速提取所需数据:

import re

set_number = re.compile(r'Data set number (\d+)'),
patterns = {
    'line_count': re.compile(r'Number of lines (\d+)'),
    'max_num': re.compile(r'Max number of column 3 is (\d+)'),
}

with open(filename, 'r') as infh:
    results = {}
    set_numbers = []

    for line in infh:
        if not line.startswith('#'):
            # skip lines without a comment
            continue

        set_match = set_number.match(line)
        if set_match:
            set_numbers.append(int(set_match.group(1)))
        else:
            for name, pattern in patterns.items():
                match = pattern.search(line)
                if match:
                    results[name] = int(match.group(1))

不要使用LineCache模块。它将把整个文件读入内存,实际上只用于访问Python源文件;每当需要打印回溯时,该模块都会缓存与当前堆栈相关的源文件。您只会在需要随机行的较小文件中重复使用它。

 类似资料:
  • 我试图使用java 9和gradle的Spring启动。我无法运行我的简单代码,我得到下面提到的错误:- 我的依赖文件和module-info.java文件非常简单。 有人能帮忙吗?? 谢谢 阿马尔

  • 我正在使用模块为每个创建多个lambda。 我得到这个错误在不同的资源时,试图组装一个策略JSON: 我做错了什么,我应该如何列出由lambda模块生成的角色ARNs? 顺便说一下,下面是模块的外观,以及迭代的本地: 编辑:以下是指向我正在使用的外部模块的链接:https://registry.terraform.io/modules/terraform-aws-modules/lambda/aw

  • 我得到3个不同的错误。 无法确定模块名称... 未命名模块读取包... 模块org.reactivestreams读取包从两个... 这些错误到底是什么? 建筑格拉德尔 错误消息: 编译Java 错误:无法确定/Users/srihariprasad/的模块名称。gradle/caches/modules-2/files-2.1/io。github。resilience4j/resilience4

  • 我已经看到了一些关于数据库到雪花的问题,但我的问题是如何将表格从雪花到数据库。 到目前为止我所做的:创建了一个集群并将集群附加到我的笔记本上(我正在使用Python) 然后我试着用spark.read读取雪花中的FBK _视频表: 我也尝试过:选项(“dbtable”,“从FBK_VIDEOS中选择*”).load() 但我看到的以下错误: net.snowflake.client.jdbc.Sn

  • 问题内容: 我有一个包含多个Maven模块的项目 MockIFSClient 访问为 因此 IFSClientTest 运行鳍,因为它们在同一包中。 问题? 尝试访问相同代码的 调用,但现在失败,因为 services / pom.xml 具有以下依赖性 题 我要做出什么改变 这样也可以从不同的模块访问它 问题答案: 这个答案帮助我正确了 如何从Java中的类路径真正读取文本文件 我将代码更改为

  • 问题内容: 我正在尝试将Spring Boot与Java 9和Gradle一起使用。我无法运行我的简单代码,出现以下错误: 我的依赖项文件和module-info.java文件非常简单。 有人可以帮忙吗? 问题答案: 排除传递依赖关系使其可以工作,并且也可以调整module-info.java !!!