首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用最后一列将列与文件分开

用最后一列将列与文件分开
EN

Stack Overflow用户
提问于 2016-05-15 23:03:53
回答 1查看 42关注 0票数 1

我正在尝试这样做:如果最后一列是1-5中的负数,那么将第二列也是最后一列写到"neg.txt“文件中。如果最后一列为正数,则需要将第二列和最后一列写入"pos.txt“。我的两个输出文件在执行后都是空的。当我认为if语句可以处理多个条件时,我不知道代码有什么问题。我也尝试了正则表达式,但它没有工作,所以我尽量简单地看什么不起作用。

输入文件如下所示:

代码语言:javascript
运行
复制
abandon     odustati         -2
abandons      napusta     -2
abandoned    napusten   -2
absentee    odsutne       -1
absentees   odsutni          -1
aboard      na brodu     1
abducted     otet       -2
accepted         prihvaceno 1

我的代码是:

代码语言:javascript
运行
复制
from urllib.request import urlopen
import re

pos=open('lek_pos.txt','w')
neg=open('lek_neg.txt','w')

allCondsAreOK1 = ( parts[2]=='1' and parts[2]=='2' and
             parts[2]=='3' and parts[2]=='4' and parts[2]=='5' )

allCondsAreOK2 = ( parts[2]=='-1' and parts[2]=='-2' and
             parts[2]=='-3' and parts[2]=='-4' and parts[2]=='-5' )

with open('leksicki_resursi.txt') as pos:
    for line in pos:
        parts=line.split()  # split line into parts
        if len(parts) > 1: # if at least 2 columns (parts)
            if allCondsAreOK:
                pos.write(parts[1]+parts[2])
            elif allCondsAreOK2:
                neg.write(parts[1]+parts[2])
        else:
            print("nothing matches")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-15 23:40:51

您不需要regex,只需要一个if/elif检查,如果在转换到int之后,最后一个值落在-5-1之间,如果它是写入neg文件的,或者如果值是写入pos文件的任何非负数:

代码语言:javascript
运行
复制
with open('leksicki_resursi.txt') as f,  open('lek_pos.txt','w')as pos, open('lek_neg.txt','w') as neg:
    for row in map(str.split, f):
        a, b = row[1], int(row[-1])
        if b >= 0:
            pos.write("{},{}\n".format(a, b))
        elif -5 <= b <= -1:
            neg.write("{},{}\n".format(a, b))

如果正数也必须在1-5之间,那么您可以做一些类似于负条件的事情:

代码语言:javascript
运行
复制
    if 5 >= int(b) >= 0:
         pos.write("{},{}\n".format(a, b))
    elif -5 <= int(b) <= -1:
         neg.write("{},{}\n".format(a, b))

另外,如果你有空行,你可以过滤掉它们:

代码语言:javascript
运行
复制
  for row in filter(None,map(str.split, f)):
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37244601

复制
相关文章

相似问题

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