Python开发3(控制语句和文件操作)

python的控制语句
1
2
3
4
5
6
7
x = input("x:")
# input支持用户输入数字和表达式,最后返回数字类型,表达式会自动计算
print(x)
x = raw_imput("x:")
# raw_input捕获原始输入,返回的是字符串类型
x = int(x) # 如果需要使用数字类型,转换位数字类型
x = x+1

####### switch语句

switch语句容易造成代码不易维护,使源文件拥挤。面向对象程序设计,常常对switch语句进行重构,把switch语句分解成若干个类。当然对于分支流程简单的switch可以使用字典来实现,使用字典更加容易管理switch.
字典是键值对组成的集合,类似JAVA的HashTable

1
2
3
4
5
6
7
8
9
10
11
12
13
# 使用字典实现switch
from __future__ import division
# python提供了__future__模块,把新版本的特性导入到当前版本
x =1
y = 2
operator = "/"
result = {
"+": x+y,
"*": x*y,
"-": x-y,
"/": x/y,
}
print result.get(operator)
循环语句

python循环语句包括while和for

1
2
3
4
5
6
7
####### while循环
numbers = raw_input("输入几个数字,以逗号分隔").split(",")
# 输入数字,赋值给numbers列表
x = 0
if x < len(numbers):
print numbers[x]
x+1 = x

1
2
3
4
5
6
7
8
9
10
11
12
# 带else的while的循环语句
x = input("输入x的值")
i = 0
while(x!=0):
if(x>0)
x-1=x
else:
x+1=x
i+1=i
print("第%d循环"%i, x)
else:
print("x等于0",x)

####### for循环
for循环用于遍历一个集合,依次访问集合中的每一个项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for 变量 in 集合:
...
else:
...
# 集合可以是元组、列表、字典等数据结构
# 每次从集合中取出一个值并赋值给变量,else可以省略
'''
for循环通常与range()函数一起使用,range(开始,结束值,步长)返回一个列表
range(5,-1,-1) ->[5,4,3,2,1,0] 包前不包后
'''

# for in 语句
for x in range(-1,3,1):
if x > 0 :
print("正数",x)
elif x == 0 :
print("零",x)
else:
print("负数")
else:
print("函数结束")

python中没有for(x=2;x<15;x++)这种表达式,可以使用:
x= 0 while x < 5: print x x + 1=x

####### break 和 continue
break: 直接中断循环
continue: 停止本次循环,进入下一次循环

1
2
3
4
5
6
7
8
9
10
x = 4
for y in range(0,20,):
if x != y:
print(y)
continue
else:
print(x)
break
# x不等于y,continue,进入下次循环
# x等于y,break中断循环,输入:0,1,2,3,4

介绍下xrange()函数:
xrange是一个类,返回一个xrange对象,`xrange(开始,结束值,步长)
xrange()进行遍历的时候 每次只返回一个值
range()返回的是列表
一次性计算并返回所有的值**,

1
2
3
4
5
# xrange()
x = xrange(0,8)
print x #输出xrange(8),这是一个xrange对象
print x[0] #输出 0
print x[7] #输出最后一个元素的值 输出结果为:7

####### xrange()实现的冒泡排序算法

1
2
3
4
5
6
7
8
9
10
11
def bubbleSort(numbers):
for j in range(len(numbers)-1,-1,-1):
for i in range(j):
if numbers[i] > numbers[i+1]: # 把数值小的放到顶端
numbers[i], numbers[i+1] = numbers[i+1], numbers[i]
print(numbers)
def main():
numbers = [23,12,9,15,6]
bubbleSort(numbers)
if __name__ == '__main__':
main()

Python文件的处理

数据的存储可以使用数据库(保持了数据完整性、关联性,数据更加安全可靠)和文件(简单易用,通常用于存储应用程序软件的参数和临时数据)

文件的基本操作

python提供os,os.path,shutil等模块用于处理文件用于处理文件,包括:
文件的创建、读写、修改和复制、删除和重命名
文件内容的搜索和替换
文件内容的比较
配置文集的读写,目录创建和遍历
文件和流

文件的打开和创建

python使用内联函数file()创建和打开文件, 返回一个file对象可以对文件进行各种操作
使用open()可以替换file(),open()是file()的别名

1
2
file(name, mode, buffering)
# name:被打开文件的名称,mode文件的打开模式,buffering设置缓存模式,0是无缓存,1表示行缓存,>1表示缓冲区的大小以字节为单位

模式名称 含义
r 以只读方式打开
r+ 以读写方式打开
w 以写入方式打开,先删除原有内容,再写入新的数据,如果文件不存在就创建一个新的文件
w+ 以读写方式打开,先删除原有内容,再写入新的数据,如果文件不存在就创建一个新的文件
a 以写入方式打开,在文件末尾增加新的内容,如果文件不存在就创建一个新的文件
a+ 以读写方式打开,在文件末尾增加新的内容,如果文件不存在就创建一个新的文件
b 以二进制方式打开文件,与r r+ w w+ a +结合使用
U 支持所有换行符,\r \n \r\n

对于图片,视频文件必须使用“b”(也就是二进制的方式读写)

file的常用属性和方法:

属性名称 方法
Closed 判断文件是否关闭,关闭返回True
Mode 显示文件的打开模式
Encoding 显示文件的编码模式 print(f.Encoding) f是file对象
Newlines 显示文件的换行模式
file(name,mode,buffering) 以mode模式打开name文件
flush 把缓存区内容写入磁盘
close 关闭文件
read(5) 读取文件中读取5个字节的内容作为字符串返回
readline() 读取1行作为字符串返回,readlines(2)表示每行每次读取两个字节,直到行的末尾
readlines() 读取每行的内容存储在列表中返回
seek(offset, whence) 把文件指针移动到1个新的位置,offset是相对于whence的位置,whence为0从文件开始的位置计算,为1表示从当前位置计算,为2表示从文件末尾位置计算
tell() 返回文件指针的位置
next() 返回下一行的内容,并将文件的指针移动到下一行
truncate(size) 删除size个字节的内容
write(str) 将字符串str的内容写入文件
writelines(str) 将字符串序列的内容写入文件

查看更多

分享到 评论

python网络数据采集1

python网络数据采集代码(github)

python代码简洁,拥有高级数据结构,能够以简单高效的方式执行面向对象编程,但是它的运行效率受人诟病,所以python经常作为一种“胶水语言”,把耗时的核心部分使用C/C++等效率更高的语言编写,然后再由python粘和。事实上,在大多数数据任务上,python的运行效率已经可以媲美C/C++.

在大数据深入人心的时代,网络数据采集作为网络、数据库、和机器学习等领域的交汇点,成为满足个性化网络数据需求的最佳实践。网络数据采集技术可以进一步精炼数据,把网络上杂乱无章的的数据聚合成规范的形式,方便分析和挖掘。

工作中经常会遇到各种数据,比如几百页的数据,或者在数据杂乱无章的网站中充满着带有陷阱的表单和坑爹的验证码,甚至需要的数据保存在网页版的PDF和网络图片中。你需要了解常用的数据采集手段和网络表单安全措施。

网络数据采集可以使用多种语言,比如:python, java ,php, C#, Go都可以。Python拥有简洁轻松的语法,开箱可用的模块,强大快乐的社区,总可以快速构建出简单高效的解决方案。

网络数据采集是涉及多个领域的:

Python数据采集的模块有:urllib, BeautifulSoup, lxml, Scrapy, PdfMiner, Requests, Selenium, NLTK, Pillow, unittest,Pysocks等
还有一些知名网站的API,MySQL数据库,OpenRefine数据分析工具,PhanthomJS无头浏览器以及Tor代理服务器等内容。

1
如果需要了解python多进程(multiprocessing),并发(concurrency),集群(cluster)等高性能和多核编程,可以移步python高性能、多核编程、设计模式的书籍。

进行网络数据采集时,要控制网络数据采集的速度,降低被采集网站服务器的负担。

什么是网络数据采集

网络数据采集也称 网页抓屏(screen scraping),数据挖掘(data mining), 网络收割(Web harvesting),或者网络机器人(bots)。
网络数据采集是通过多种手段收集网络数据的方式,涉及数据库,网络服务器,HTTP协议,HTML语言,网络安全,图像处理,数据科学等。
网络数据采集不光是通过与API交互(或者与浏览器进行交互)的方式,还需要处理js,多媒体和cookie的新式网站。最常用的方法是写一个自动化程序向网络服务器请求数据(通常是HTML表单或其他网页文件),然后对数据进行解析,提取需要的信息。

网络数据挖掘流程:采集数据 -> 数据清洗 ->挖掘模型构建 -> 归类展示(可视化)
数据采集的可视化; 爬取数据 ->存入数据库 ->调用数据库将数据可视化

网络爬虫可以完成传统搜索引擎不能做的事情,搜索引擎不能填写表单,比如爬取大量网站的数据查询出航班价格随时间变化的图表,爬虫可以一次可以成千上百万个网页。

存在各种API(Twitter或者维基百科的API),可以向用户提供服务器中格式完好的数据,而且一个API提供了不同的数据类型,在某些时候API是比爬虫获取数据更加方便。但是在:

  • 你收集的数据来自不同的网站,没有一个API能够综合多个网站的数据。
  • 你采取的数据非常小众,网站不会为你单独做一个api
  • 一些网站没有基础设施或者技术能力去建API
  • 即使API存在,有时候还会有请求内容和次数限制,API提供的数据类型或者数据格式也可能无法满足需求

大多数的应用场景都会用到这样毫无阻碍获取数据的手段:市场预测,机器语言翻译,甚至医疗诊断领域,通过对新闻网站、文章以及健康论坛中的数据进行采集和分析,也可以获取很多好处。无论处于哪个领域,网络数据采集都会让你的工作更加高效,提升生产力,甚至开创一个全新的领域。

查看更多

分享到 评论

我该如何Act

值得浏览的网站:

              思考有时候比机械的code重要

95%CSDN解析CTCI

CSDN还是要多看看的,不管机器学习还是数据挖掘(分析),上面的干货多。

95%对菜鸟开发者的叮咛
90%每个优秀程序员必须具备的技术技能
95%豆瓣读书
程序员面试金典(第5版)

豆瓣上书书评,算法,面试的书籍、豆列都是极好的

80%快客网

2016.9.25 下午2:00 我打算写完睡一会

最近我很少更新博客和简书了,有很多方面的原因吧。开学将近一个月了,我也不知道上的是什么,发生了什么我也记不太清了,连诉说的人也越来越少,我不是抱怨因为不起作用了只能默默接受,毕竟事实就是这样。

爸妈之前一直电话微信问我怎么样,我不愿意他们担心太多也不愿意去骗他们,只能说还好,具体哪里好哪里不好我也懒得说,也说不清。我的身体越来越不好,连一点免疫力都没有,有时候我在想这他妈该死的日子能不能发生点转机,结果真的没有。我连续好几天的做噩梦,后来才知道我爸心脏可能有些不舒服了,跟我爷爷一起在医院里治疗。之前总想着玩,家里还有我爸呢,现在我爸身体不好了,我觉得我应该做些什么了,最让我沮丧的是我什么也做不了,我没有找到一份工作哪怕挣一点钱,我妈总是说你回来吧(不知道她是心大还是太溺爱我),为着一个不知道怎样的结局而走着,我不想因为我个人的事情破坏大家的心情,所以我一直以为我与这个世界是格格不入的。

查看更多

分享到 评论

数据库概论基础知识—-1

数据库系统概论

数据库的4个基本概念

数据、数据库、数据库管理系统、数据库系统是与数据库技术密切相关的4个基本概念

  1. 数据(data)

    数据是数据库中存储的基本对象。

    描述事物的符号记录被称为数据

描述事物的符号可以是数字、文本、音频、图形、图像、视频等多种形式,他们都可以经过数字化存入计算机。

在计算机中常常这样描述:

   (李明,男,199505,江苏省南京市,计算机系,2013)`



数据的含义称为数据的语义,数据与其语义是不可分的。
  1. 数据库(Database,DB)

数据库是长期存储在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并为各种用户共享。

概括的来讲,数据库具有永久存储、可共享、有组织三个基本特点

  1. 数据库管理系统

数据库管理系统是位于用户与操作系统之间的一层数据管理软件,数据库管理系统和操作系统一样是计算机的基础软件,它的主要功能包括以下几个方面:

(1) 数据定义功能

数据库管理系统提供数据定义语言(DDL),用户通过它可以方便地对数据库中的数据对象的组成和结构进行定义

(2)数据组织、存储和管理

数据库管理系统要分类组织、存储和管理各种数据,包括数据字典、用户数据、数据的存取路径等。数据的组织和存储的基本目标是提高空间利用率和方便存取,提供多种存取方法(如Hash查找、索引查找、顺序查找)来提高存取效率。

(3) 数据操纵功能

数据库管理系统提供数据操纵功能(DML),用户可以使用它来操纵数据,如插入、修改、删除、查询等

(4)数据库的事务管理和运行管理

数据库在建立、运用和维护时由数据库管理系统统一管理和控制,以保证事务的正确运行,保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复

(5)数据库的简历与维护

数据库的建立和维护功能包括数据库的初始数据的输入、转换功能,数据库的转储、恢复功能,数据库的重组织和性能监视、分析功能等。这些功能由使用程序和管理工具完成

(6) 其他功能

其他功能:数据库管理系统与网络中其他软件系统的通信功能,一个数据库管理系统与另一个数据库管理系统或文件系统的数据转换功能,异构数据库之间的互访和互操作功能。

  1. 数据库系统

数据库系统是由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统。

一般不引起混淆的情况下,把数据库系统简称为数据库

数据管理的三个阶段

人工管理阶段->文件系统阶段->数据库系统阶段

现在比较流行的:

Redis

Redis快速入门

Redis 有三个主要使其有别于其它很多竞争对手的特点:

Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的;

Redis相比许多键值数据存储系统有相对丰富的数据类型;

Redis可以将数据复制到任意数量的从服务器中;

hadoop

hadoop官方文档http://hadoop.apache.org/

spark

spark入门Python版

spark官方文档

Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。其架构如下图所示:

查看更多

分享到 评论