Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带正则表达式头定义的PANDES read_表_Python_Regex_Pandas - Fatal编程技术网

Python 带正则表达式头定义的PANDES read_表

Python 带正则表达式头定义的PANDES read_表,python,regex,pandas,Python,Regex,Pandas,对于格式如下的数据文件: ("Time Step" "courantnumber_max" "courantnumber_avg" "flow-time") 0 0.55432343242 0.34323443432242 0.00001 我可以使用pd.read\u表(文件名,sep='',header=0),除了第一个头,“时间步长”,它将得到所有正确的结果 有没有办法为read\u table()指定一个正则表达式字符串,用于解析标题名 我知道解决这个问题的一种方法是使用regex为re

对于格式如下的数据文件:

("Time Step" "courantnumber_max" "courantnumber_avg" "flow-time")
0 0.55432343242 0.34323443432242 0.00001
我可以使用
pd.read\u表(文件名,sep='',header=0)
,除了第一个头,
“时间步长”
,它将得到所有正确的结果

有没有办法为
read\u table()
指定一个正则表达式字符串,用于解析标题名

我知道解决这个问题的一种方法是使用regex为
read\u table()
函数创建一个名称列表,但我认为可能/应该有一种方法可以在导入本身中直接表达出来

编辑:以下是它作为标题返回的内容:

['("Time', 'Step"', 'courantnumber_max', 'courantnumber_avg', 'flow-time']

因此,在
pandas.read\u table()函数中实际上似乎不可能执行此操作。下面是我最终用来解决问题的实际解决方案:

import re

def get_headers(file, headerline, regexstring, exclude):
    # Get string of selected headerline
    with file.open() as f:
        for i, line in enumerate(f):
            if i == headerline-1:
                headerstring = line
            elif i > headerline-1:
                break

    # Parse headerstring
    reglist = re.split(regexstring, headerstring)

    # Filter entries in reglist
        #filter out blank strs
    filteredlist = list(filter(None, reglist)) 

        #filter out items in exclude list
    headerslist = []
    if exclude:
        for entry in filteredlist:
            if not entry in exclude:
                headerslist.append(entry)
    return headerslist

get_headers(filename, 3, r'(?:" ")|["\)\(]', ['\n'])
代码说明:
获取标题()


参数,
file
是包含标头的文件对象
headerline
是标头名称存在的行号(从1开始)
regexstring
是将被送入
re.split()
的模式。强烈建议您在regex模式前添加一个
r
<代码>排除
是要从标题列表中删除的杂项字符串列表

我使用的正则表达式模式:


首先,我们有管道(
|
)符号。这样做是为了将“普通”拆分方法(即
)和其他需要删除的内容(即括号)分开

从第一组开始:
(?:“”)
。我们有
(…)
,因为我们希望按顺序匹配这些字符。
是我们想要匹配的东西,作为分割的对象。
?:
基本上是说不捕获组的内容。这很重要/有用,否则
re.split()
会将任何组作为单独的项目保留。请参阅文档中的


第二组就是其他角色。如果没有它们,第一个和最后一个项目将是
”(“时间步长”
'flow-Time)\n'
。请注意,这会导致
\n
被视为列表中的一个单独条目。这就是为什么我们在事后使用
排除
参数来解决这个问题。

您的意思是“它会把所有事情都做好”而不是“写”吗"? 此外,如果标题行确实是按照您的方式编写的,那么您的分隔符可能是“”(双引号-空格-双引号),而不是简单的“(空格)。我面临着类似的情况,标题很奇怪。一般来说,我会用普通的python文件I/O只捕获标题,执行一些正则表达式和其他解构,以生成带有标题名的列表,然后直接以read_csv形式传递该列表,忽略第0行。我想请你也这么做。是的,我的意思是“对”而不是“写”。我已经改正了。改变分隔符不也会改变数据本身的解析方式吗?否则,你的建议就行了。不管怎样,我现在正在处理一个外部正则表达式解决方案。假设您没有更改
quotechar='',quoting=0
的默认值,它应该可以正常工作。@gyx hh在使用指定的
quotechar='',quoting=0
再次运行它之后,我会遇到同样的问题。我认为前面的括号就是问题所在。请参阅编辑,了解标题名称解析中到底出了什么问题。啊,是的,你是对的-很抱歉,当我复制示例时,我排除了括号。我认为在pd.read\u table中没有办法做到这一点