【问题标题】:How to store values of a particular line of a text file in separate variables in Python如何将文本文件特定行的值存储在 Python 中的单独变量中
【发布时间】:2015-04-01 18:41:47
【问题描述】:

我有一个文本文件,上面写着这个。

a,b,c,d,e,f,g,h    
a,b,c,i,j,k,l,m    
f,k

现在,我想将第一行存储为一个列表,第二个列表存储在另一个列表中。但是第三个两个值,我想存储在一些特定的变量中,比如 a=f, b=k。

我已经编写了代码,但是在阅读第三行时显示错误。 请有人帮忙。

这是我的代码。

filename = 'input.txt'     
fin=open(filename,'r')    
n=fin.readline()    
m=fin.readline()    
a,b=fin.readline()

更新:

with open('input.txt') as fin:
    n=fin.readline().split()
    m=fin.readline().split()

    line=(fin.readline())

a,b=line[0],line[2]

i=0

for i in range(0,len(n)): 
    if n[i]!=a:
        i+=1
    cp=i-1

i=0
for i in range(0,len(n)): 
    if n[i]!=a:
        i+=1
    posa=i-1

i=0
for i in range(0,len(n)): 
    if m[i]!=b:
        i+=1
    posb=i-1

while(posa>cp):
    posa-=1

while(posa>cp):
    posb-=1

if(cp<0):
    print("No Common Predecessor")

elif (posa<posb):
    if(posa<0):
        posa=0
    print("Common Predecessor: %s" %n[posa])

else:
    if(posb<0):
        posb=0
    print("Common Predecessor: %s" %m[posb])

【问题讨论】:

  • a,b=fin.readline().split() ...甚至不值得作为答案发布...
  • @Joran: split() 本身不会以逗号分隔。
  • 啊,当...
  • 额外的代码转储与您的问题有什么关系?

标签: python


【解决方案1】:

方法readline() 返回字符串。要获取您必须使用的列表:

m=fin.readline().strip().split(',')
n=fin.readline().strip().split(',')
a,b=fin.readline().strip().split(',')

【讨论】:

    【解决方案2】:

    与打开一起使用;

    with open('my.txt') as f:
        lines = f.read().splitlines()
        # lines[0] == 'a,b,c,d,e,f,g,h'
        # lines[1] == 'a,b,c,i,j,k,l,m' 
        # lines[2] == 'f,k'
        # lines[3] == '.'
    
        n = list(lines[0].split(','))
        m = list(lines[1].split(','))
        a, b = lines[2].split(',')
    
        # n == ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h    ']
        # m == ['a', 'b', 'c', 'i', 'j', 'k', 'l', 'm    ']
        # a == f
        # b == k
    

    然后你可以对每一行做你想做的事情。

    【讨论】:

    • 这意味着 f 和 k 将存储在同一个变量lines[2]中。我想将它存储在两个不同的变量中,比如 a 和 b。
    • @DipyanDev 我没有在那里声明任何变量,我只是展示了lines 的每个部分的样子,因此==。你可以从lines声明你的变量,比如a, b = lines[2].split(',')
    【解决方案3】:

    您的问题在于a,b=fin.readline() 将执行fin.readline() 两次,给您a = 'f,k' 和b = '.'(这是读取的以下行)

    为了防止这种情况,您可以将前一行分配给一个变量,然后然后将其拆分为变量a 和b。

    例如:

    filename = 'input.txt'    
    fin = open(filename )
    n=fin.readline().split()
    m=fin.readline().split()
    line=(fin.readline())
    a,b=line.split(',')
    b=b.strip()
    

    或者使用with open的更简化的方法:

    with open('input.txt') as fin:
        n=fin.readline().split()
        m=fin.readline().split()
        line=(fin.readline())
        a,b=line.split(',')
        b=b.strip()
    

    这两种方法都会产生输出:

    >>> n
    ['a,b,c,d,e,f,g,h']
    
    >>> m
    ['a,b,c,i,j,k,l,m']
    
    >>> a
    'f'
    
    >>> b
    'k'
    

    【讨论】:

    • 我尝试了您的解决方案。当我尝试在后面的程序中访问“a”时,它会显示错误。 IndexError:列表索引超出范围(在“a”处)
    • @DipyanDev 这将取决于您稍后在程序中如何调用a。要么将其编辑到您的问题中,要么针对该问题提出新问题。最好是后者。
    • @DipyanDev 我对我的代码进行了编辑,现在试试。让我知道它是否有效。
    • with open('input.txt') as fin: n=fin.readline().split() m=fin.readline().split() line=(fin.readline() ) a,b=line[0],line[2] print (a) print (b) print (n) i=0 while(n[i]==m[i]): i+=1 cp=i- 1 i=0 while(n[i]!=a): i+=1 posa=i-1 i=0 while(m[i]!=b): i+=1 posb=i-1 while(posa>cp ): posa-=1 while(posa>cp): posb-=1 if(cp
    • @DipyanDev 你不能像这样将代码粘贴到 cmets 中,尝试将其“编辑”到你的问题中
    猜你喜欢
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多