热线电话:13121318867

登录
2018-11-28 阅读量: 844
文本文件基础

处理文本文件的第一步是通过 open 命令来获取一个文件对象:

# 'r' 意味着只读
file_for_reading = open('reading_file.txt', 'r')
# 'w' 是写入——会破坏已存在的文件!
file_for_writing = open('writing_file.txt', 'w')
# 'a' 是添加——加入到文件的末尾
file_for_appending = open('appending_file.txt', 'a')
# 完成以后别忘了关闭文件
file_for_writing.close()

因为非常容易忘记关闭文件,所以你应该在 with 程序块里操作文件,这样在结尾处文件会

被自动关闭:

with open(filename,'r') as f:
data = function_that_gets_data_from(f)
# 此时,f已经关闭了,别再试图使用它
process(data)

如果需要读取一个完整的文本文件,可以使用 for 语句对文件的行进行迭代:

starts_with_hash = 0
with open('input.txt','r') as f:
for line in file: # 查找文件中的每一行
if re.match("^#",line): # 用正则表达式判断它是否以'#'开头
starts_with_hash += 1 # 如果是,计数加1

按这种方法得到的每一行会用换行符来结尾,所以在对读入的行操作之前会经常需要用

strip() 来进行处理。

例如,假设你有一个写满电子邮件地址的文件,每个地址一行,你想利用这个文件生成

域名的直方图。 正确地提取域名的规则有些微妙(如公共后缀列表, https://publicsuffix.

org/),但一个好的近似方案是只取出电子邮件地址中 @ 后面的部分。(对于像 joel@mail.

datasciencester.com 这样的邮件地址,会给出错误的答案。)

def get_domain(email_address):
"""split on '@' and return the last piece"""
return email_address.lower().split("@")[-1]
with open('email_addresses.txt', 'r') as f:
domain_counts = Counter(get_domain(line.strip())
for line in f
if "@" in line)
0.0000
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子