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)


暂无数据
推荐帖子
0条评论
0条评论
0条评论