使用 Python 选择一列中具有特定范围值的行

2023-12-04

我知道这很简单,但我是 Python 的新用户,所以我在这里遇到了一些麻烦。顺便说一句,我正在使用 Python 3。

我有多个文件,看起来像这样:

姓名 日期 年龄 性别 颜色

Name Date Age Sex Color
Ray  May  25.1 M  Gray
Alex Apr  22.3 F  Green
Ann  Jun  15.7 F  Blue

(假设这是制表符分隔的。我应该补充一点,真实的文件将有大约 3,000 行和 17-18 列)

我想要做的是选择年龄列中的值小于 23 的所有行。

在此示例中,输出将是:

Name Date Age Sex Color
Alex Apr  22.3 F  Green
Ann  Jun  15.7 F  Blue

这是我尝试做的:

f = open("addressbook1.txt",'r')
line = f.readlines()
file_data =[line.split("\t")]
f.close()

for name, date, age, sex, color in file_data:
    if age in line_data < 23:
        g = open("college_age.txt",'a')
        g.write(line)
    else:
        h = open("adult_age.txt",'a')
        h.write(line)

现在,理想情况下,我有 20-30 个这样的“地址簿”输入文件,我希望这个脚本循环遍历所有这些文件,并将所有年龄在 23 岁以下的条目添加到同一个输出文件(“college_age.txt”)中。我真的不需要保留其他线路,但我不知道还能用它们做什么。

当我运行该脚本时,会生成错误。

AttributeError: 'list' object has no attribute 'split'

然后我将第三行更改为:

file_data=[line.split("\t") for line in f.readlines()]

它不再给我一个错误,而是什么也不做。它只是开始,然后开始。

有什么帮助吗? :) 记住我对 Python 很笨。

我应该补充一点,我的实际数据有小数,而不是整数。我编辑了上面的数据以反映这一点。


这里的问题是你正在使用readlines()两次,意思是第一次读取数据,第二次就什么都没有了。

您可以直接迭代文件而不使用readlines()- 事实上,这是更好的方法,因为它不会立即读取整个文件。

虽然您可以通过使用来做您想做的事情str.split()正如你所拥有的,更好的选择是使用the csv module,这是专为该任务而设计的。

import csv

with open("addressbook1.txt") as input, open("college_age.txt", "w") as college, open("adult_age.txt", "w") as adult:
   reader = csv.DictReader(input, dialect="excel-tab")
   fieldnames = reader.fieldnames
   writer_college = csv.DictWriter(college, fieldnames, dialect="excel-tab")
   writer_adult = csv.DictWriter(adult, fieldnames, dialect="excel-tab")
   writer_college.writeheader()
   writer_adult.writeheader()
   for row in reader:
       if int(row["Age"]) < 23:
          writer_college.writerow(row)
       else:
          writer_adult.writerow(row)

那么我们在这里做什么?首先我们使用the with陈述 for 打开文件。它不仅更具Python风格和可读性,而且可以为您处理关闭,即使发生异常也是如此。

接下来我们创建一个DictReader从文件中读取行作为字典,自动使用第一行作为字段名称。然后,我们让编写器写回我们的拆分文件,并写入标头。使用DictReader这是一个偏好问题。它通常在您经常访问数据的情况下使用更多(并且当您不知道列的顺序时),但它使代码在这里易于阅读。但是,您可以只使用标准csv.reader().

接下来,我们循环遍历文件中的行,检查年龄(我们将其转换为 int,以便我们可以进行数值比较)以了解要写入哪个文件。这with声明为我们关闭了文件。

对于多个输入文件:

import csv

fieldnames = ["Name", "Date", "Age", "Sex", "Color"]
filenames = ["addressbook1.txt", "addressbook2.txt", ...]

with open("college_age.txt", "w") as college, open("adult_age.txt", "w") as adult:
   writer_college = csv.DictWriter(college, fieldnames, dialect="excel-tab")
   writer_adult = csv.DictWriter(adult, fieldnames, dialect="excel-tab")
   writer_college.writeheader()
   writer_adult.writeheader()
   for filename in filenames:
       with open(filename, "r") as input:
           reader = csv.DictReader(input, dialect="excel-tab")
           for row in reader:
               if int(row["Age"]) < 23:
                  writer_college.writerow(row)
               else:
                  writer_adult.writerow(row)

我们只需添加一个循环来处理多个文件。请注意,我还添加了字段名称列表。在我只使用文件中的字段和顺序之前,但由于我们有多个文件,我认为在这里这样做会更明智。另一种方法是使用第一个文件来获取字段名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 选择一列中具有特定范围值的行 的相关文章

随机推荐

  • 内存映射文件有哪些优点?

    我一直在研究一个项目的内存映射文件 并且非常感谢以前使用过它们或决定不使用它们的人的任何想法 为什么 我特别担心以下问题 按重要性排序 并发性 随机访问 表现 使用方便 可移植性 我认为优点实际上是与传统的读取文件方法相比 减少了所需的数据
  • 使用 PHPMailer 发送 unicode 表情符号

    我正在尝试通过 PHPMailer 5 2 发送 unicode 表情符号 但我发送的电子邮件收到的是奇怪的字符而不是表情符号 我目前正在发送 HTML 电子邮件 我刚刚echo包含一些 utf 8 表情符号的字符串并检查电子邮件源 该字符
  • 拖放多个文件的批处理文件?

    我希望能够完成与下面类似的事情 但是使用 pcutmp3 拖放多个文件的批处理文件 我很难理解 Joey 所做的添加 因为我通常不这样做 但我想将多个文件 cue 放在一个批处理文件上并让它运行多次 这就是批处理文件中的以下行发生 echo
  • 致命错误:C 中超出了 30 秒的最大执行时间:[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我对这个错误感到非常震惊 根本无法得到它 Fatal
  • 返回 AsAsyncEnumerable() 时出现 ObjectDisposeException

    在我的 NET Core 3 WebAPI 项目中 我有以下简单的方法调用 HttpGet ViewerRoles public IAsyncEnumerable
  • 如何实现链表的前置而不需要分配给新变量?

    有人告诉我如何实现链表 enum List Cons u32 Box
  • 如何在一行中增加或减少现有词典键的数值

    在Java中 可以增加或减少数值one line向 a 添加元素时HashMap 有没有办法在C 中做到这一点Dictionary 以Java为例 hashMap put key hashMap getOrDefault key 0 1 I
  • 将 Android 库项目添加到 Eclipse 构建路径?

    我有一个多模块 Android Maven 项目 它由多个项目和一个 Android 库项目 baselib 组成 我在其中运行非基于 Android 的 JUnit 测试 只要我通过 Maven 运行测试就可以了 当我使用 Run gt
  • 在shinydashboard中动态创建可排序的menuSubItems

    我有一个闪亮的应用程序 使用shinydashboard我在其中动态创建的包menuSubItem是在sidebarMenu of a dashboardSidebar 子项的创建由操作按钮触发 我可以创建menuSubItem在服务器端就
  • 如何在 Angular Firebase 中修复浏览器刷新时的“TypeError:无法读取 null 的属性‘getIdToken’”?

    我在 Angular 8 中使用 Firebase 在前端和后端对用户进行身份验证 为了在后端对用户进行身份验证 我需要发送用户 ID 令牌 我正在使用 firebase getIdToken 来获取令牌 它可以部分工作 刷新页面时出现错误
  • 将子域重定向到子文件夹

    我需要编写重写规则 将子域重定向到子文件夹 例子 子域名 domain io应该重定向到域名 io apps 子域名 and test7 domain io应该重定向到域名 io apps test7等等 在 htaccess 文件中 我可
  • 删除Expo SYSTEM_ALERT_WINDOW权限android

    我正在尝试更新我的 Google Play 商店应用程序 但收到一条警告 指出我的某些设备无法更新 因为我拥有系统警报窗口权限 我正在世博会管理的工作流程中工作 请帮助我摆脱此权限 我尝试了很多 但是没有成功 我如何从我的博览会反应本机项目
  • 表情符号是如何实现的?

    表情符号是如何存储的以及使用 unicode 的哪一部分来传输此类数据 跨应用程序使用它是否有一个标准 表情符号只是 unicode 中的字符 他们有自己的代码和一切 它们在屏幕上的准确显示方式 这取决于操作系统及其安装的字体 以下是 un
  • 访问串行端口需要哪些 ASP.NET 权限?

    我正在开发一个 asp net 应用程序 我希望它通过串行端口与 arduino 板进行通信 我创建了一个可以执行此操作的 Windows 应用程序 并且它有效 但是当我在 asp net 应用程序上使用相同的代码时 我收到一个异常 显示
  • 增加 php 的最大执行时间

    我已经添加了set time limit 0 函数可以增加执行时间 但最多只执行2 3分钟 error reporting E ALL error reporting 1 set time limit 0 我想从一个需要很长时间的网站搜索链
  • 算法来找到一个数字,其中4和7的乘积在给定范围内最大

    我陷入了一个问题 其中下界L和上限U给出 现在假设整数的十进制表示形式X出现数字 4A次数和数字 7 出现B times 问题是要找到X其中最大值为A B for L lt X lt U 有什么高效的算法可以解决吗 如果我正确理解了这个问题
  • gridview C# 中滚动查看器的水平偏移

    我正在使用 Windows 8 发布预览版和 C VS 2012 开发 Metro 应用程序 有没有办法通过提供 Horizo ntalOffset 来滚动网格视图水平滚动条 Brief 在scroll viewer类中 我们可以使用动态移
  • ContentResolver.openAssetFileDescriptor() 在 Android 12 中需要很长时间

    在 Android 12 中 此方法调用需要几秒钟才能返回 val descriptor contentResolver openAssetFileDescriptor rootUri r 我向它传递一个树 Uri 它代表 USB 驱动器的
  • 如何使用 bluebird 承诺 MongoDB 原生 Javascript 驱动程序?

    我想使用MongoDB 原生 JS 驱动 with 蓝鸟承诺 我该如何使用Promise promisifyAll 在这个图书馆 2 0 分支文档包含更好的承诺指南https github com petkaantonov bluebird
  • 使用 Python 选择一列中具有特定范围值的行

    我知道这很简单 但我是 Python 的新用户 所以我在这里遇到了一些麻烦 顺便说一句 我正在使用 Python 3 我有多个文件 看起来像这样 姓名 日期 年龄 性别 颜色 Name Date Age Sex Color Ray May