python选取列中数据的范围_使用Python在一列中选择具有特定值范围的行

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

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

虽然您可以使用str.split()来完成您想要做的事情,但是更好的选择是使用the ^{} 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 ^{} statement表示opening files。它不仅更加python和可读性,而且可以处理关闭,即使出现异常。

接下来我们创建一个DictReader,它将从文件中读取行作为字典,并自动使用第一行作为字段名。然后,我们让writer写回被拆分的文件,并写入头。使用DictReader是一个偏好问题。在经常访问数据的地方(以及不知道列的顺序时),它通常使用得更多,但它使代码在这里可读性更好。不过,您可以使用标准的csv.reader()。

接下来,我们循环遍历文件中的行,检查age(我们将其转换为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)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值