首页 > 解决方案 > Python - 从与参​​数匹配的文件中提取数据

问题描述

我有一个文件,其中包含有关用户及其登录次数的信息。我正在尝试提取所有登录 >= 250 的用户并将其保存到另一个文件中。我是 python 编码的新手,在尝试运行我的这部分代码时继续收到“invalid literal with base 10”错误。谁能帮助我并解释为什么会发生这种情况,以便我可以防止将来发生这种情况?TIA 谢谢

def main():
  userInformation = readfile("info")
  suspicious = []
  for i in userInformation :
    if(int(i[2])>=250):
       suspicious.append(i)

如果需要,下面的完整代码:

#Reading the file function
def readFile(filename):
    file = open(filename,'r')
    lines =  [x.split('\n')[0].split(';') for x in file.readlines()]
    file.close()
    return lines

def writeFile(suspicious):
 
    file = open('suspicious.txt','w')
    for i in suspicious:
        
        file.write('{};{};{};{}\n'.format(i[0],i[1],i[2],i[3]))
   
    file.close()

def main()
   userInformation = readfile("info")
   suspicious = []
   for i in userInformation :
     if(int(i[2])>=250):
       suspicious.append(i)
   writeFile(suspicious)
   
   print('Suspicious users:')
   for i in suspicious:
      print('{} {}'.format(i[0],i[1]))
main()
 

这是我的文件的一些行:

乔迪;拉明斯;278

克里斯;泰勒;113

大卫;曼恩;442等

标签: python

解决方案


好的,所以我拿了你的示例文件并玩了一下。我面临的问题主要是间距问题。所以,这是您可能喜欢的代码 -

UsersInfoFileName = '/path/to/usersinfofile.txt'
MaxRetries = 250
usersWithExcessRetries = []

with open(UsersInfoFileName, 'r') as f:
  lines = f.readlines()
  consecutiveLines = (line.strip() for line in lines if line.strip())
  for line in consecutiveLines:
    if (int(line.split(';')[-1]) > MaxRetries):
      usersWithExcessRetries.append(line)

for suspUsers in usersWithExcessRetries:
  print(suspUsers)

这就是它的作用 -

  • 读取给定文件中的所有行
  • 通过排除可能为空的行来过滤所有行
  • 删除剩余行的周围空白
  • 读取最后一个分号分隔的值,并将其与 MaxRetries 进行比较
  • 如果值超过 MaxRetries,则将原始行添加到列表中

推荐阅读