Python高效编程(四)

实际编程和面试都会遇到的典型问题。

图片来源于网络

如何读写文本文件

# python2
s = u'你好'
f = open('py2.txt','w') 
f.write(s.encode('gbk'))
f.close()
f = open('py2.txt','r')
t = f.read()
f.close()
print t.decode('gbk')

# python3
f = open('py3.txt','wt',encoding='utf-8')
f.write('你好')
f.close()
f = open('py3.txt','rt',encoding='utf-8')
s = f.read()
f.close()
print(s)

如何设置文件的缓冲

# 全缓冲
# 默认是4096
f = open('demo.txt','w',buffering=2048)
f.write('-' * 2048)
f.write('+')
# 行缓冲
f = open('demo1.txt','w',buffering=1)
# 无缓冲
f = open('demo2.txt','w',buffering=0)

如何访问文件的状态

import os
import stat

#第一种 直接使用系统调用
# 1 文件的类型
s = os.stat('demo.txt')
stat.S_ISDIR(s.st_mode)
stat.S_ISREG(s.st_mode)

# 2 文件的访问权限
s.st_mode & stat.S_IXUSR

# 3 文件的最后的访问/修改/节点状态更改时间
import time

time.localtime(s.st_atime)
time.localtime(s.st_mtime)
time.localtime(s.st_ctime)
# 4 普通文件的大小
s.st_size

#第二种使用os.path下的函数
os.path.isdir('demo.txt')
os.path.isfile('demo.txt')

os.path.getatime

如何使用临时文件

from tempfile import TemporaryFile,NamedTemporaryFile

f = TemporaryFile()
f.write(b'acvbnm'*100)
f.seek(0)

f.read(2)

ntf = NamedTemporaryFile()
ntf.name

如何读写csv文件

from urllib.request import urlretrieve

# 下载平安银行2017-04-01到2017-10-20的数据
#日期,股票代码,名称,收盘价,最高价,最低价,开盘价,前收盘,涨跌额,涨跌幅,换手率,成交量,成交金额,总市值,流通市值,成交笔数
urlretrieve('http://quotes.money.163.com/service/chddata.html?code=1000001&start=20170401&end=20171020','pingan.csv')

with open('pingan.csv','rt',encoding = 'gbk') as rf:
    reader = csv.reader(rf)
    with open('pingan_copy.csv','wt') as wf:
        writer = csv.writer(wf)
        headers = next(reader)
        writer.writerow(headers)
        for row in reader:
            # 提取出2017-10-01后 成交额大于5000W的数据
            if row[0] < '2017-10-01':
                break
            if round(float(row[12])) >= 50000000:
                writer.writerow(row)

print('end')

如何读写json文件

import json
import requests

url = 'http://wthrcdn.etouch.cn/weather_mini?city=北京'
response = requests.get(url)

# json.loads: str转成dict
res = json.loads(response.content.decode('utf-8'))
type(res)
weather_forecast = res['data']['forecast'][0]

# json.dumps: dict转成str
l = json.dumps(res)
type(l)

如何构建并解析xml文件

from xml.etree.ElementTree import Element,ElementTree,tostring,parse

e = Element('collection')
e.set('shelf','New Arrivals')
e1 = Element('movie')
e1.set('title','Enemy Behind')
e11 = Element('type')
e11.text = 'War, Thriller'
e1.append(e11)
e.append(e1)
e2 = Element('movie')
e2.set('title','Enemy Behind')
e21 = Element('type')
e21.text = 'War, Thriller'
e2.append(e21)
e.append(e2)
e3 = Element('movie')
e3.set('title','Enemy Behind')
e31 = Element('type')
e31.text = 'War, Thriller'
e3.append(e31)
e.append(e3)
e4 = Element('movie')
e4.set('title','Enemy Behind')
e41 = Element('type')
e41.text = 'War, Thriller'
e4.append(e41)
e.append(e4)

et = ElementTree(e)
et.write('demo.xml')
 
f = open('demo.xml')
et = parse(f)
root = et.getroot()

# for child in root:
#     print(child.get('title'))

#只能寻找当前元素的直接子元素
root.find('movie[@title]')
root.findall('movie')
root.findall('movie[1]')
root.findall('movie[@title="Ishtar"]')
root.findall('movie[type="Comedy"]')
list(root.iter('movie'))

如何读写excel文件

import xlrd,xlwt

# 读
rbook = xlrd.open_workbook('demo.xlsx')
sheet = rbook.sheet_by_index(0)
# 列数
sheet.ncols
# 行数
sheet.nrows
# 单元格 cell
cell = sheet.cell(0,0)
# 返回一行
sheet.row(0)
sheet.row_values(1)
# 返回一列
sheet.col(0)
sheet.col_values(1)

# 写
wbook = xlwt.Workbook()
wsheet = wbook.add_sheet('sheet1')
# 写入cell
wsheet.write(0,0,'123')
wbook.save('output.xlsx')

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小詹同学

Python程序员需要掌握的网络爬虫技术

当下是一个大数据的时代,各个行业都离不开数据的支持,因此,网络爬虫应运而生。编写网络爬虫当下最为火热的语言毫无疑问是Python,原因是,Python开发爬虫相...

1213
来自专栏mini188

技术笔记:Indy的TIdSMTP改造,解决发送Html和主题截断问题

使用Indy来发邮件坑不少啊,只不过有比没有好吧,使用delphi6这种老工具没办法,只能使用了新一点的Indy版本9,公司限制。。。 1、邮件包含TIdTex...

1816
来自专栏从零开始学 Web 前端

从零开始学 Web 之 JavaScript(一)JavaScript概述

JavaScript历史 要了解JavaScript,我们首先要回顾一下JavaScript的诞生。在上个世纪的1995年,当时的网景公司正凭借其Naviga...

862
来自专栏FreeBuf

腾讯御见捕获Flash 0day漏洞(CVE-2018-5002)野外攻击

腾讯御见威胁情报中心近日监控到一例使用Adobe Flash 0day漏洞(CVE-2018-5002)的APT攻击,攻击者疑通过即时聊天工具和邮箱等把恶意Ex...

840
来自专栏青枫的专栏

JavaScript的介绍

 javascript是什么?     javascript 是因特网上最流行的脚本语言,它存在于全世界所有 Web 浏览器中,能够增强用户与 Web 站...

512
来自专栏令仔很忙

EasyUI----EasyUI-Tree联想加模糊查询

最近做的项目中用到了EasyUI的Tree,树的结构是这样的,有22个车站,每一个车站相当于一个逻辑域(虚拟域),每一个域下有许多的设备类型,拿我现在做的门禁系...

854
来自专栏前端安全

和XSS漏洞对抗的日子

前端安全日益受到业内的关注,最近笔者和团队在和XSS漏洞对抗的这段时间,总结了部分常见的漏洞和修复方法,下面将结合具体业务对这些漏洞类型进行分析。

34015
来自专栏Python爬虫与算法进阶

Python最假的库:Faker

前辈在review的时候说怎么这么复杂,Python中有一个专门生成各类假数据的库:Faker,你去了解下。

2124
来自专栏谭伟华的专栏

Vue 组件开发实践之 scopedSlot 的传递

在使用Vue开发我们的vhtml-ui的组件库的过程中遇到了组件嵌套组件时需要传递scopedSlot的情况,官方的文档和教程目前还没有比较明确的指引,所以摸着...

2.8K1
来自专栏数据小魔方

R语言爬虫实战——网易云课堂数据分析课程板块数据爬取

R语言的爬虫生态虽然与Python相比要弱小很多,but,如果你真的想要用R干一些有趣的事情,那么R语言目前所具有的的网络爬取工具也能给你带来很多方便。 今天...

3384

扫码关注云+社区