python知识点

1.版本不同,语法不同

print 'Hello World' 2+

print('Hello World') 3+

 

2.编码

Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。

解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了。

 

3.pass

#!/usr/bin/python # -*- coding: UTF-8 -*- # 输出 Python 的每个字母 for letter in 'Python': if letter == 'h': pass print '这是 pass 块' print '当前字母 :', letter print "Good bye!"

pass与return ''的不同在于,pass是个空语句,还可以继续执行与之并列并且在pass后面的数据

 

4.python中字典和json的异同:

我们会发现,从形式来讲,这两者的确很像,都为 key : value 的形式,那么它们两者的异同是什么呢? 

  简单来说,python 字典的数据格式就json的数据格式。 

  但本质上来讲,字典是一种数据结构,json是一种格式;字典有很多内置函数,有多种调用方法,而json是数据打包的一种格式,并不像字典具备操作性,并且是格式就会有一些形式上的限制,比如json的格式要求必须且只能使用双引号作为key或者值的边界符号,不能使用单引号,而且“key”必须使用边界符(双引号),但字典就无所谓了。

  形式上的相近也让python提供了json.loads()转换函数,方便json数据的调用。 

  使用方法如下:

import json a=json.loads('{"a":"1","b":"2"}') print a

 

 

5.模块不等于函数

例如,要导入模块 fib 的 fibonacci 函数,使用如下语句:

from fib import fibonacci

这个声明不会把整个 fib 模块导入到当前的命名空间中,它只会将 fib 里的 fibonacci 单个引入到执行这个声明的模块的全局符号表。

 

6.drop_duplicates()

返回一个去重之后的DataFrame

 

7.在centos中运行*.py文件,使用python *.py即可

 

8.list extend

extend()函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

aList=[123,"xyz"]
bList=["shellerine","abc",5]
aList.extend(bList)

print(aList)
#[123,"xyz","shellerine","abc",5]

 

补充1

  1. defaultdict,set,list好用: 因为set可以取唯一值,还可以做交并补等操作,list可以直接判断某个元素是否在list中,用if xx in yy:的形式

  2. sort与sorted的区别: sort是排序list的,sorted排序可以迭代的

  3. format(): 使用{}和:来操作,控制小数位,对齐方式,显示形式,进制等

  4. 读写tsv,txt与csv: 写,直接fwrite.write(line)即可,读是for line in fread:,在写csv的时候一般csv.write(f).writerow(xxxx);注意换行符这些的处理

  5. readlines(): "b",代表二进制格式,使用with keyword去打开文件的好处是,会自动在不用了的时候关闭文件,不用自己写f.closed,即使打开文件出错,也可以关闭文件,比try-finally这种写法简单

  6. datetime https://docs.python.org/3.6/library/datetime.html#module-datetime 真的是太多函数了,到用的时候再去看吧 datetime中包含date,time,datetime等,还有求时差,时区的,strftime() and strptime()

    delta = datetime(2017, 11, 25) - rcall['create_time']   #第一单与20171125之间的时间间隔天数
    span = delta.days
    enddate=datetime.datetime.strptime('2018-04-01','%Y-%m-%d')
    
  7. openpyxl https://openpyxl.readthedocs.io/en/stable/ 注意sheet的名字不要有特殊符号,例如"/"

  8. 统计每个销售每天的电话数量(第一行为日期,第一列为各个销售的姓名,这个表当时思考了半天如何实现):

# coding: utf-8

# In[1]:
from openpyxl import Workbook, load_workbook
from collections import defaultdict as dd
import datetime
import sys
from collections import defaultdict as dd

#staff_date2core=dd(list)
staff_date2core=dd(set)

staff2group = dd(str)

staffs=[]

sale_resulst=dd(list)

#data2core=dd(list)
data2core=dd(set)

feature_value=dd(set)

with open('entity_feature_competitor_20180301-20180401.tsv', 'r') as fread:
    numbers = []
    for line in fread:
        staff_date, group, callId, _, number, feature, _ = line.strip().split('\t')
        staff,date=staff_date.split('@')
        staff2group[staff] = group
        #遍历电话,把每个销售每天的电话加到dd(set)中,key是staff_date
        staff_date2core[staff_date].add(callId)
        data2core[date].add(number)
        if staff not in staffs:
            staffs.append(staff)


enddate=datetime.datetime.strptime('2018-04-01','%Y-%m-%d')


for staff in staffs:
    startdate=datetime.datetime.strptime('2018-03-01','%Y-%m-%d')
    sale_resulst[staff].append(staff)
    sale_resulst[staff].append(staff2group[staff])
    while startdate<enddate:     
        staff_date=staff+"@"+str(startdate.strftime('%Y-%m-%d'))
        sale_resulst[staff].append(len(staff_date2core[staff_date]))
        #对应list的第三个元素是每个销售当天的电话数量
        startdate+=datetime.timedelta(days=1)


##找到每个销售每一天的电话数量


pos = 1


from openpyxl import Workbook, load_workbook
wb = Workbook()
ws = wb.active
ws.title = "销售人员情况分析"

###表头
tabletitle=["销售","部门"]

startdate=datetime.datetime.strptime('2018-03-01','%Y-%m-%d')

while startdate<enddate:
    tabletitle.append(str(startdate.strftime('%Y-%m-%d')))
    startdate+=datetime.timedelta(days=1)

row_cnt = 1

for col_cnt in range(1, len(tabletitle) + 1):
    cell = ws.cell(row=row_cnt, column=col_cnt)
    cell.value = tabletitle[col_cnt - 1]


###主要内容

for staff in staffs:
    row_cnt += 1

    for col_cnt in range(1, len(sale_resulst[staff]) + 1):
        cell = ws.cell(row=row_cnt, column=col_cnt)
        cell.value = sale_resulst[staff][col_cnt - 1]
        #这里就是存到excel里对应位置,staff是dict的key,确定行,[col_cnt-1]对应list的第几个元素,对应列;要明白这里是事先将列名固定,并且list中的数据与列名位置对应好

sum_result=[]
#写入excel的数据一般是list,如果一行有多个值
sum_result.append("提到竞品提及的总数")
sum_result.append("xx网")

startdate=datetime.datetime.strptime('2018-03-01','%Y-%m-%d')
    
while startdate<enddate:     
    sum_result.append(len(data2core[str(startdate.strftime('%Y-%m-%d'))]))
    startdate+=datetime.timedelta(days=1)

row_cnt += 1

for col_cnt in range(1, len(sum_result) + 1):
    cell = ws.cell(row=row_cnt, column=col_cnt)
    cell.value = sum_result[col_cnt - 1]


avg_result=[]
avg_result.append("平均")
avg_result.append("xx网")

startdate=datetime.datetime.strptime('2018-03-01','%Y-%m-%d')
    
while startdate<enddate: 
    avg_date_result='%.2f' % (len(data2core[str(startdate.strftime('%Y-%m-%d'))])/len(staffs))   
    avg_result.append(avg_date_result)
    startdate+=datetime.timedelta(days=1)

row_cnt += 1

for col_cnt in range(1, len(avg_result) + 1):
    cell = ws.cell(row=row_cnt, column=col_cnt)
    cell.value = avg_result[col_cnt - 1]

#ws2 = wb.create_sheet(title="Pi")

wb.save('competitor_20180301_20180401.xlsx')
  1. 读excel:
# coding: utf-8

from openpyxl import Workbook, load_workbook
from collections import defaultdict as dd
from datetime import datetime


# 第一阶段: 读数据到3个字典
wb = load_workbook('20170101-20180228业绩明细.xlsx') # workbook名字

ws_revenue = wb["Sheet3"] # worksheet名字

max_row = 124421 # excel总行数

deal_closed_numbers = []

staff2n_deal = dd(int)
number2closed_staff = dd(str)

with open('number2deal_closed.train.tsv', 'w') as fwrite_train, open('number2deal_closed.test.tsv', 'w') as fwrite_test:
    #读取excel的第二行到最后一行的下一行
    for row in range(2, max_row + 1):
        core_id = str(ws_revenue.cell(row=row, column=1).value)
        #取excel对应行的第1列数据
        transaction_date = ws_revenue.cell(row=row, column=2).value
        sname = ws_revenue.cell(row=row, column=3).value
        product_type = ws_revenue.cell(row=row, column=4).value
        money=ws_revenue.cell(row=row,column=5).value

        #if product_type != "VIP":  
        #    continue
        if product_type=="VIP"||money>=1000{
            line = '{}\t{}\n'.format(core_id, sname)
            if transaction_date < datetime(2017, 12, 1):   ###以这个时间作为训练集和测试集的分割点
                fwrite_train.write(line)
            else:
                fwrite_test.write(line)
        }
  1. 定时发送邮件(smtplib):
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def send_email():
    # 第三方 SMTP 服务
    mail_host = "smtp.163.com"  # SMTP服务器
    mail_user = "shellerine"  # 用户名
    mail_pass = "xxxx"  # 密码

    sender = 'shellerine@163.com'  # 发件人邮箱(最好写全, 不然会失败)
    receivers = ['xxx@xxx.com','xxx@xxx.com.cn']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
    #创建一个带附件的实例
    message = MIMEMultipart()
    title = '访问记录'  # 邮件主题
    message['From'] = "{}".format(sender)
    message['To'] = ",".join(receivers)
    message['Subject'] = title

    #邮件正文内容
    message.attach(MIMEText('您好!此邮件的附件为访问记录,请查收!', 'plain', 'utf-8'))

    #构造附件1,传送当前目录下的event_records.xlsx文件
    att1=MIMEText(open('event_records.xlsx','rb').read(),'base64','utf-8')
    att1['Content-Type']='application/octet-stream'
    #这里的filename可以任意写,
    att1["Content-Disposition"]='attachment;filename="event_records.xlsx"'
    message.attach(att1)


    try:
        smtpObj = smtplib.SMTP_SSL(mail_host, 465)  # 启用SSL发信, 端口一般是465
        smtpObj.login(mail_user, mail_pass)  # 登录验证
        smtpObj.sendmail(sender, receivers, message.as_string())  # 发送
        print("mail has been send successfully.")
    except smtplib.SMTPException as e:
        print(e)
        


import time
import schedule

def job():
    baixing_event()
    time.sleep(1)
    send_email()
 
schedule.every().day.at("9:30").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

11.tensorflow求特征权重: 这个流程,拿到数据,处理特征列,将特征列分割成可以需要的特征,按正负样本比例分数据,进行模型训练,就是逻辑回归分类,然后看每个特征的的系数

12.pycharm整体移动代码: 1.pycharm使多行代码同时缩进 鼠标选中多行代码后,按下Tab键,一次缩进四个字符 2、pycharm使多行代码同时左移 鼠标选中多行代码后,同时按住shift+Tab键,一次左移四个字符

 

补充2.

1.os.getcwd()

file="C:/Users/Shellerine/Documents/iris.csv"

import pandas as pd
import os

pwd=os.getcwd()
os.chdir(os.path.dirname(file))
df=pd.read_csv(os.path.basename(file),header=1)
os.chdir(pwd)
df.head(10)

 

pwd=os.getcwd() 获得当前目录,指的是运行脚本的目录

os.chdir()用于改变当前工作目录到指定的路径

os.path.basename() 返回文件名

在这个过程中,先保留当前工作目录,中间改成指定路径获取数据之后,再将工作路径改回来

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值