您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

这里的问题是您使用了readlines()两次,这意味着第一次读取数据,然后第二次什么都没剩下。

您可以直接在文件上进行迭代,而无需使用readlines()-实际上,这是更好的方法,因为它不会一次读取整个文件

尽管可以通过按需使用来完成尝试做的事情str.split(),但是更好的选择是使用为任务设计csv模块

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)

那我们在这里做什么?首先我们使用with语句用于打开文件。它不仅更具Python可读性,而且即使在发生异常时也可以为您处理关闭

接下来,我们创建一个DictReader文件中读取作为字典的行,自动使用第一行作为字段名。然后,我们让编写者写回我们的拆分文件,并将标头写入其中。使用DictReader优先考虑。通常在访问大量数据的地方(以及当您不知道列的顺序)使用它的次数更多,但是它使代码在此处易于阅读。但是,您可以只使用standardcsv.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)

我们只是添加一个循环来处理多个文件。请注意,我还添加一个字段名称列表。在我只使用文件中的字段和顺序之前,但是由于我们有多个文件,因此我认为在此处执行此操作更为明智。一种替代方法是使用第一个文件获取字段名称

python 2022/1/1 18:27:24 有188人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶