python - 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等
解决方案
好的,所以我拿了你的示例文件并玩了一下。我面临的问题主要是间距问题。所以,这是您可能喜欢的代码 -
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,则将原始行添加到列表中
推荐阅读
- php - 如何使用正则表达式在 PHP 中获取多次出现的公式
- python - 在一个瓶子应用程序中使用多进程创建多个瓶子实例
- arrays - 如何将具有固定尺寸的文本文件加载到二维数组中
- multithreading - CPU绑定工作线程的协作中断的习惯用法是什么?
- c - 为什么第二个参数不适用于 strtol?
- c++ - 为什么我的程序没有处理所有功能?
- javascript - Firebase onSnapshot 状态管理问题
- django - 令牌身份验证不起作用 django rest 框架
- docker - docker 容器仅在 windows GUI 下运行
- javascript - 如何在 google colab 中制作文本区域?