首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中找到某个模式后才能读取csv文件?

如何在Python中找到某个模式后才能读取csv文件?
EN

Stack Overflow用户
提问于 2019-01-15 13:07:57
回答 5查看 2.5K关注 0票数 2

因此,我有几个表示某些数据的 csv文件,每个文件可能有不同的初始注释行

table_doi: 10.17182/hepdata.52402.v1/t7
name: Table 7
...
ABS(YRAP), < 0.1
SQRT(S) [GeV], 1960
PT [GEV], PT [GEV] LOW, PT [GEV] HIGH, D2(SIG)/DYRAP/DPT [NB/GEV]
67, 62, 72, 6.68
...
613.5, 527, 700, 1.81E-07

我只想读入相关的数据和它们的标题,它们是从一行开始的

PT [GEV], PT [GEV] LOW, PT [GEV] HIGH, D2(SIG)/DYRAP/DPT [NB/GEV]

因此,我会想到的策略是找到模式PT [GEV]并从那里开始阅读。

然而,我不确定如何在Python中实现这一点,有人能在这方面帮助我吗?

提前谢谢你!

顺便说一句,我目前拥有的函数是

import os
import glob
import csv

def read_multicolumn_csv_files_into_dictionary(folderpath, dictionary):
    filepath = folderpath + '*.csv'
    files = sorted(glob.glob(filepath))
    for file in files:
        data_set = file.replace(folderpath, '').replace('.csv', '')
        dictionary[data_set] = {}
        with open(file, 'r') as data_file:
            data_pipe = csv.DictReader(data_file)
            dictionary[data_set]['pt'] = []
            dictionary[data_set]['sigma'] = []
            for row in data_pipe:
                dictionary[data_set]['pt'].append(float(row['PT [GEV]']))
                dictionary[data_set]['sigma'].append(float(row['D2(SIG)/DYRAP/DPT [NB/GEV]']))
    return dictionary

这只有在我手动删除csv文件中的那些初始注释时才起作用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-01-15 14:02:42

假设每个文件都有一行以PT [GEV]开头

import os
import pandas as pd

...
csvs = []
for file in files:
    with open(file) as f:
        for i, l in enumerate(f):
            if l.startswith('PT [GEV]'):
                csvs.append(pd.read_csv(file, skiprows = i))
                break
df = pd.concat(csvs)
票数 1
EN

Stack Overflow用户

发布于 2019-01-15 14:17:35

查看startswith。另外,你可以在这里找到详细的解释。https://cmdlinetips.com/2018/01/3-ways-to-read-a-file-and-skip-initial-comments-in-python/

票数 2
EN

Stack Overflow用户

发布于 2019-01-15 14:14:50

尝试这样做,它将搜索包含PT [GEV]的行,如果找到包含,它会将m更改为true,并开始将剩余的日期附加到列表中:

import csv

contain= 'PT [GEV]'
List=[]
m=false
with open('Users.csv', 'rt') as f:
     reader = csv.reader(f, delimiter=',') 
     for row in reader:
          for field in row:
              if field == contain:
              m=true
          if m==true:
             List.append(row)            
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54192970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档