Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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
使用re.split在Python中将文件拆分为行_Python_Regex_List Comprehension - Fatal编程技术网

使用re.split在Python中将文件拆分为行

使用re.split在Python中将文件拆分为行,python,regex,list-comprehension,Python,Regex,List Comprehension,我正在尝试使用类似以下代码拆分具有列表的文件: lines = [x for x in re.split(r"\n+", file.read()) if not re.match(r"com", x)] 但是,“行”列表的最后一个元素始终为空字符串。有人知道避免这种情况的方法吗(不包括在后面放一个pop()的麻烦)?lines=file.readlines() 编辑: 或者,如果你不想在那里有空白行,你可以这样做 lines=filter(lambda:(a!='\n'),file.readl

我正在尝试使用类似以下代码拆分具有列表的文件:

lines = [x for x in re.split(r"\n+", file.read()) if not re.match(r"com", x)]
但是,“行”列表的最后一个元素始终为空字符串。有人知道避免这种情况的方法吗(不包括在后面放一个pop()的麻烦)?

lines=file.readlines()

编辑: 或者,如果你不想在那里有空白行,你可以这样做

lines=filter(lambda:(a!='\n'),file.readlines()

编辑^2: 要删除尾随的newine,可以执行以下操作

lines=[re.sub('\n','',line),用于过滤器中的行(lambda:(a!='\n'),file.readlines())]

lines=file.readlines()

编辑: 或者,如果你不想在那里有空白行,你可以这样做

lines=filter(lambda:(a!='\n'),file.readlines()

编辑^2: 要删除尾随的newine,可以执行以下操作


lines=[re.sub('\n','',line)用于过滤器中的行(lambda:(a!='\n'),file.readlines())]

将正则表达式锤收起来:-)

  • 你可以直接迭代一个文件
    readlines()
    现在几乎过时了
  • 阅读(及其朋友,
    lstrip()
    rstrip()
  • 不要将
    文件
    用作变量名。这是一种糟糕的形式,因为
    文件
    是一种格式
  • 您可以将代码编写为:

    lines = []
    f = open(filename)
    for line in f:
        if not line.startswith('com'):
            lines.append(line.strip())
    
    如果仍有空行,可以添加测试:

    lines = []
    f = open(filename)
    for line in f:
        if line.strip() and not line.startswith('com'):
            lines.append(line.strip())
    
    如果你真的想把它放在一行中:

    lines = [line.strip() for line in open(filename) if line.strip() and not line.startswith('com')]
    

    最后,如果您使用的是Python2.6,请查看以进一步改进

  • 你可以直接迭代一个文件
    readlines()
    现在几乎过时了
  • 阅读(及其朋友,
    lstrip()
    rstrip()
  • 不要将
    文件
    用作变量名。这是一种糟糕的形式,因为
    文件
    是一种格式
  • 您可以将代码编写为:

    lines = []
    f = open(filename)
    for line in f:
        if not line.startswith('com'):
            lines.append(line.strip())
    
    如果仍有空行,可以添加测试:

    lines = []
    f = open(filename)
    for line in f:
        if line.strip() and not line.startswith('com'):
            lines.append(line.strip())
    
    如果你真的想把它放在一行中:

    lines = [line.strip() for line in open(filename) if line.strip() and not line.startswith('com')]
    

    最后,如果您使用的是Python2.6,请查看以进一步改进。

    这应该会起作用,并消除正则表达式:

    all_lines = (line.rstrip()
                 for line in open(filename)
                 if "com" not in line)
    # filter out the empty lines
    lines = filter(lambda x : x, all_lines)
    
    由于您使用的是列表理解,而不是生成器表达式(因此整个文件都会加载到内存中),因此有一个快捷方式可以避免代码过滤掉空行:

    lines = [line
         for line in open(filename).read().splitlines()
         if "com" not in line]
    

    这应该是可行的,并且消除了正则表达式:

    all_lines = (line.rstrip()
                 for line in open(filename)
                 if "com" not in line)
    # filter out the empty lines
    lines = filter(lambda x : x, all_lines)
    
    由于您使用的是列表理解,而不是生成器表达式(因此整个文件都会加载到内存中),因此有一个快捷方式可以避免代码过滤掉空行:

    lines = [line
         for line in open(filename).read().splitlines()
         if "com" not in line]
    

    另一个方便的技巧,尤其是当您需要行号时,是使用enumerate:

    
    fp=打开(“myfile.txt”、“r”)
    对于n,枚举中的行(fp.readlines()):
    dosomethingwith(n,线)
    


    我最近才发现enumerate,但从那以后它已经派上了很多用场。

    另一个方便的技巧,尤其是当您需要行号时,是使用enumerate:

    
    fp=打开(“myfile.txt”、“r”)
    对于n,枚举中的行(fp.readlines()):
    dosomethingwith(n,线)
    


    我最近才发现enumerate,但从那以后它已经派上了好几次用场。

    保留后面的换行符。我不确定这是否是OP.file的一个问题。readlines()不完全相同。。。它包括每行末尾的换行符,并包括空行。保留尾随的换行符。我不确定这是否是OP.file的一个问题。readlines()不完全相同。。。它包括每行末尾的换行符,还包括空行。自去年以来,我就没有写过任何Python,我正在从一次简短但糟糕的PERL测试中恢复过来。多亏了你的回答,我又回到了思维定势:)我从去年开始就没有写过任何Python,我正在从一次短暂但糟糕的PERL测试中恢复过来。多亏了你的回答,我又回到了思维模式:)你可以只写“过滤器(无,所有行)”而不是“过滤器(lambda x:x,所有行)”。虽然我从来没有对这条捷径感到完全满意:-)而不是“filter(lambda x:x,all_line)”,你可以只写“filter(None,all_line)”。尽管我从来没有对这条捷径感到完全满意:-)