精华内容
下载资源
问答
  • 广告关闭2017年12月,云+社区...),python 提供了非常丰富的内置函数,我们只需要直接调用即可,例如 print() 的功能是“打印到屏幕”,input() 的作用是接收用户输入(注:python3 用 input() 取代了 python2 的...

    flbm1hkjk6.jpg广告关闭

    2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品。未来,我们一起乘风破浪,创造无限可能。

    为了方便程序员快速编写脚本程序(脚本就是要编程速度快快快!),python 提供了非常丰富的内置函数,我们只需要直接调用即可,例如 print() 的功能是“打印到屏幕”,input() 的作用是接收用户输入(注:python3 用 input() 取代了 python2 的raw_input(),用法如有不懂请看视频讲解)。 1. 用课堂上小甲鱼教的方法...

    muyo2alu3e.png

    今天我们来开始学习python的基础语法。 在学习语法之前首先教大家写第一个python程序。 第一个python程序python属于交互式编程,交互式编程不需要创建脚本文件,是通过 python 解释器的交互模式进来编写代码。 window 上在安装 python 时已经安装了交互式编程客户端,在电脑搜索处输入idle? 然后点击,就可以进入编写...

    print()是python自带的一个函数(function),它主要的用处就是在屏幕上显示一些东西。 print英文字符后面带上一个英文格式下的括号()。 参数:参数分为形参和实参,print的完整用法是 print(value, ..., sep= , end=n, file=sys.stdout,flush=false)。 我们只看第一个value,这个我们就称为形参(函数内部用于指向被传...

    表名我们不能重名,不要使用中文命名 3). 最后一个列名后面可以省略分号 需求: 创建我们的第一张表格:表名(python1808_你的名字) 设计的列和类型&长度如下:列名类型&长度 姓名(name)varchar2(30) 年龄(age)number(3) 性别(sex)char(2)出生年月(birthday)date 毕业学校(school)varchar2(25) 返回目录...

    xui0aqzd6n.png

    用到的开发环境 ide:pycharm python version :2.7 掌握的知识:pycharm 还能更改python的版本代码如下:(重点就是 正则表达式的学习)# ! usrbinpython# -*- coding:utf-8 -*- # 功能说明 使用python 批量爬取网络上的图片下载import reimporturllib# 首先打开网页 获取网页的源代码html =urllib.urlopen(http:www...

    qeroja0iej.jpeg

    上一篇,我们讲到了python的搭建化境。 抱歉啊,最近有点拖稿,这一篇呢,我们会讲到python的第一个程序。 好的,还是打开我们的edit with idle。{48db5344-d67e-4439-9d9a-7ccede05ff77}_20200502110130.jpg接着就可以开始编辑了记住,程序的所有代码都要在英文模式下输入。 那有人就问:“小李子啊,我怎么知道我是...

    python 语言 continue 语句语法格式如下:continue流程图:? 实例:实例(python 2.0+)#! usrbinpython# -*- coding: utf-8 -*- for letter in python:# 第一个实例 if letter == h:continue print(当前字母 :, letter) var = 10 # 第二个实例while var > 0:var = var -1 if var == 5: continue print 当前变量值 :, ...

    python中一切皆对象:class a:是一个类对象a = a():是一个实例对象在程序运行时,类同样会被加载到内存。 在python中,类是一个特殊的对象--类对象。 在程序运行时,类对象在内存中只有一份,使用一个类可以创建出多个对象实例。 除了封装实例的属性和方法外,类对象还可以有自己的属性和方法。 通过类名. 的方式...

    7v0sjtcofn.png

    从一出生,python已经具有了 :类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。 实际上,python第一个实现是在 mac 计算机上。 可以说,python是从abc发展起来,主要受到了 modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响,并且结合了unix shell 和c的习惯...

    mapmap 函数映射 fun 到容器中每个元素,并返回迭代器 xx = map(str, )for e in x:print(e, type(e)) 下面写法不够 pythonerfor e in : print(e, str(e)) # 1,3,5 15. reducereduce 是在 functools 中,第一个参数是函数,其必须含有 2 个参数,最后归约为一个标量。 from functools import reducex = y = reduce...

    n7ryw0480q.png

    零、新建python文件在你喜欢的地方新建一个名为first_python.py的文件,然后利用atom打开(具体atom怎么配置python开发环境,这里就不详述,大家可以在网上搜索相关的教程) 在文件中输入如下代码:def sayhello():print(hello python !) if __name__==__main__:sayhello()一、运行python文件打开windows命令行,切换...

    弱类型定义语言: 数据类型可以被忽略的语言。 它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。 强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。 我们即将学习的python是一门动态解释性的强类型定义语言。 四、python的优缺点 优点:简单...

    c11jqkkl1d.png

    在终端中输入python , 回车退出 :在python shell中输入exit(),回 车在 python shell中输入python代码,回车可立即获得执行结优点:简单便捷,即时反馈,不需要创建python文件缺点:不能保存代码,不方便输入或修改结构复杂的代码 ? python shell 下的第一个程序:1. 进入终端(命令行模式)2. 输入 python , 回车...

    vssdx80kdz.png

    定义函数相当于给这段代码取了个名字,后面就可以直接通过这个名字来执行这段代码,而不需要再敲一段相同的代码。 python中,函数的应用十分广泛,前面我们已经接触过一些函数,比如print()、round()函数等等,这些都是 python 的内置函数,可以直接使用。 但有时候内置函数并不能满足你所有的需求,这个时候你就需要...

    wkopbs6lcr.jpeg

    有态度地学习其实每次爬东西的时候,特怕ip被封,所以每次都要把时间延迟设置得长一点... 这次用python搭建一个简单的代理池。 获取代理ip,然后验证其有效性。 不过结果好像不是很理想,为什么西刺代理的高匿代理都能用? 不是说免费代理不好使吗? 真的是黑人问号脸... 01 代理获取01 网页分析? 通过点击西刺代理...

    ciznx1xq19.png

    还要在语言里选择python,告诉编辑器你写的是python,这样文本就会高亮,遇到#号注释会识别出来,每一种语言的语法都是有些区别的,比如java的注释是 ?然后我们开始我们的第一个python编写第一个python程序我们第一个程序输出“helloworld! 保存时选择文件类型为python,文件名不需要加.py了,它会自动给你加的。 ?...

    srjqsnsfm8.png

    变量和赋值1. 变量的命名规范变量只能是一个词、只能包含数字、字母、下划线、不能以数字开头、尽量描述包含的数据内容、不要使用python函数名和关键字例如变量的信息是姓名,可以使用name; 变量的信息是数字,可以使用number; 变量的信息是分数,可以使用score..... 把"’千就"’赋值给name ,通过print()函数...

    i697s0o7uh.png

    在python程序中导入其他模块使用import, 所导入的模块必须在sys.path所列的目录中,因为sys.path第一个字符串是空串即当前目录,所以程序中可导入当前目录的模块。 (1) 字节编译的.pyc文件导入模块比较费时,python做了优化,以便导入模块更快些。 一种方法是创建字节编译的文件,这些文件以.pyc为扩展名。 pyc是一种...

    6qoqec1min.png

    python是一门易学的面向对象的程序设计语言,可以轻易地完成界面、文件、封装等高阶需求,可移植性好,有非常多功能强大的库与包,如numpy(数值计算)、scipy(数学、科学与工程计算)、matplotlib(数据绘图工具)等等,强大的python除了可以实现应用程序开发、数据可视化、网站开发以外,近年来机器学习人工智能大火...

    ljxaomemvp.png

    print(another arg through *argv:, arg)test_var_args(yasoob, python, eggs, test)这会产如下输出:first normal arg: yasoobanother arg through *argv:pythonanother arg through *argv: eggsanother arg through *argv:test**kwargs **kwargs 允许你将不定长度的键值对, 作为参数传递给个函数。 如果你想要在个...

    展开全文
  • I have a simple 2 column csv file called st1.csv:GRID St11457 6141458 6571459 6791460 7321461 7541462 8111463 748However, when I try to read the csv file, the first column is n...

    1586010002-jmsa.png

    I have a simple 2 column csv file called st1.csv:

    GRID St1

    1457 614

    1458 657

    1459 679

    1460 732

    1461 754

    1462 811

    1463 748

    However, when I try to read the csv file, the first column is not loaded:

    a = pandas.DataFrame.from_csv('st1.csv')

    a.columns

    outputs:

    Index([u'ST1'], dtype=object)

    Why is the first column not being read?

    解决方案

    Judging by your data it looks like the delimiter you're using is a .

    Try the following:

    a = pandas.DataFrame.from_csv('st1.csv', sep=' ')

    The other issue is that it's assuming your first column is an index, which we can also disable:

    a = pandas.DataFrame.from_csv('st1.csv', index_col=False)

    展开全文
  • 1. 确认源excel存在并用xlrd读取第一个表单中每第一列的数值。 import xlrd, xlwt import os assert os.path.isfile('source_excel.xls'),There is no timesheet exist. Exit...
  • python文件操作

    2019-05-04 13:27:15
    目录一 python路径拼接os.path.join()函数的用法二 将 print 输出到文件三 判断文件/文件夹是否存在四 文本文件操作五 pandas文件(第一行属性) 一 python路径拼接os.path.join()函数的用法   我们都知道...

    一 当前文件路径

    os.path.abspath('.')
    

    二 python路径拼接os.path.join()函数的用法

      我们都知道对于不同的系统,系统路径的分隔符是不一样的:Windows系统为“\”,Linux系统为“/”,Mac OS系统为“:”。
      我们平时对系统文件路径进行操作时,通常用“+”和不同系统的分隔符进行拼接。那么有没有一种方法能够在我们跨平台时,不需要修改自己的代码,而实现这一操作呢?
      os模块中的os.oath.join(path, name)可以连接目录与文件名或目录。我们使用这个方法,就能够实现跨平台的文件操作。
      os.path.join():连接两个或更多的路径名组件,如果各组件名首字母不包含’/’,则函数会自动加上,如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃,如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾。

    import os 
    
    Path1 = 'home'
    Path2 = 'develop'
    Path3 = 'code'
    
    Path10 = Path1 + Path2 + Path3
    Path20 = os.path.join(Path1, Path2, Path3)
    print('Path10 = ', Path10)
    print('Path20 = ', Path20)
    

    输出如下:
    Path10 = homedevelopcode
    Path20 = home/develop/code

    import os 
    
    Path1 = '/home'
    Path2 = 'develop'
    Path3 = 'code'
    
    Path10 = Path1 + Path2 + Path3
    Path20 = os.path.join(Path1, Path2, Path3)
    print(Path10 = ', Path10)
    print(Path20 = ', Path20)
    

    输出如下:
    Path10 = /homedevelopcode
    Path20 = /home/develop/code

    import os 
    
    Path1 = 'home'
    Path2 = '/develop'
    Path3 = 'code'
    
    Path10 = Path1 + Path2 + Path3
    Path20 = os.path.join(Path1, Path2, Path3)
    print(Path10 = ', Path10)
    print(Path20 = ', Path20)
    

    输出如下:
    Path10 = home/developcode
    Path20 = /develop/code

    import os 
    
    Path1 = 'home'
    Path2 = 'develop'
    Path3 = '/code'
    
    Path10 = Path1 + Path2 + Path3
    Path20 = os.path.join(Path1, Path2, Path3)
    print(Path10 = ', Path10)
    print(Path20 = ', Path20)
    

    输出如下:
    Path10 = homedevelop./code
    Path20 = home/develop/./code

    三 print格式化输出

      %r:用来做 debug 比较好,因为它会显示变量的原始数据(raw data),而其它的符号则是用来向用户显示输出的。
      1、打印字符串
    print ("His name is %s"%("Aviad"))
    效果:
    2.打印整数
    print ("He is %d years old"%(25))
    效果:
    3.打印浮点数
    print ("His height is %f m"%(1.83))
    效果:
    4.打印浮点数(指定保留小数点位数)
    print ("His height is %.2f m"%(1.83))
    效果:
    5.指定占位符宽度
    print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83))
    效果:
    6.指定占位符宽度(左对齐)
    print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Aviad",25,1.83))
    效果:
    7.指定占位符(只能用0当占位符?)
    print ("Name:%-10s Age:%08d Height:%08.2f"%("Aviad",25,1.83))
    效果:
    8.科学计数法
    format(0.0015,'.2e')
    效果:
    我们还可以用词典来传递真实值。如下:
    print ("I'm %(c)s. I have %(l)d yuan." % {'c':'hungry','l':22})
    调试输出:
    I’m hungry. I have 22 yuan.
    格式符
    格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:
    %s 字符串 (采用str()的显示)
    %r 字符串 (采用repr()的显示)
    %c 单个字符
    %b 二进制整数
    %d 十进制整数
    %i 十进制整数
    %o 八进制整数
    %x 十六进制整数
    %e 指数 (基底写为e)
    %E 指数 (基底写为E)
    %f 浮点数
    %F 浮点数,与上相同
    %g 指数(e)或浮点数 (根据显示长度)
    %G 指数(E)或浮点数 (根据显示长度)
    %% 字符"%"
    可以用如下的方式,对格式进行进一步的控制:
    %[(name)][flags][width].[precision]typecode
    (name)为命名
    flags可以有+,-,’ ‘或0。+表示右对齐。-表示左对齐。’ '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充。
    width表示显示宽度
    precision表示小数点后精度
    比如:
    print("%+10x" % 10)
    print("%04d" % 5)
    print("%6.3f" % 2.3)
      上面的width, precision为两个整数。我们可以利用*,来动态代入这两个量。比如:print("%.*f" % (4, 1.2)),Python实际上用4来替换*。所以实际的模板为"%.4f"。
      总结:Python中内置的%操作符可用于格式化字符串操作,控制字符串的呈现格式。Python中还有其他的格式化字符串的方式,但%操作符的使用是最方便的。

    四 将 print 输出到文件

    import os
    t = 5
    s = 'hello world!'
    with open('test.txt','a') as file0:
        print('%d' % t,'%s' % s,file=file0)
    

      print延迟问题,根源是python默认启用了stdout缓冲,解决的办法有两种:
      一种办法是每次print后,都调用stdout flush(),把缓冲区打印出来,这个办法比较麻烦,要重载stdout,不推荐。最简单的方法是用命令行参数-u启动python,禁用stdout缓冲;
      比如脚本是build-native.py,运行python -u build-native.py就不会出现print延迟问题了。

    五 log模块

      本节内容来自这里

    1 配置文件

      添加配置文件 logger_config.ini。文件的后缀名其实无所谓,conf,ini 或者别的都行。我把该文件放置在/{$项目名}/resource/路径下。
      重点1:TimedRotatingFileHandler 用来配置log的滚动删除,arg 里的“midnight”, 1, 6,’utf-8′ 表示“每一天午夜12点将当天的日志转存到一份新的日志文件中,并且加上时间戳后缀,最多保存6个文件,编码格式UTF-8,支持中文”
      重点2:如果要同时输出到2个文件和屏幕上,那么需要使用三个 handler,2个为 TimedRotatingFileHandler,还有1个是 StreamHandler
      重点3:level 级别如下,级别越低,打印的日志越详细,例如级别为 noset,则会打印出所有信息,如果级别为 info,那么不会打印出 debug 信息。我们的例子中,级别为 info,日志里不会打印出 debug 的信息。
    在这里插入图片描述
      下面是详细的配置文件:

    [loggers]
    keys=root
    
    [handlers]
    keys=rotatingFileHandler,streamHandler,errorHandler
    
    [formatters]
    keys=simpleFmt
    
    [logger_root]
    level=DEBUG
    handlers=rotatingFileHandler,streamHandler,errorHandler
    
    [handler_rotatingFileHandler]
    class=handlers.TimedRotatingFileHandler
    level=INFO
    formatter=simpleFmt
    args=(os.path.abspath(os.getcwd() + "/resource/ta_log/default.log"),"midnight", 1, 6,'utf-8')
    
    
    [handler_errorHandler]
    class=handlers.TimedRotatingFileHandler
    level=ERROR
    formatter=simpleFmt
    args=(os.path.abspath(os.getcwd() + "/resource/ta_log/error.log"), "midnight", 1, 6,'utf-8')
    
    [handler_streamHandler]
    level=INFO
    class=StreamHandler
    formatter=simpleFmt
    args=(sys.stdout,)
    
    [formatter_simpleFmt]
    format=%(asctime)s %(pathname)s(%(lineno)d): %(levelname)s %(message)s
    

    2 全局log

      编写globalLog.py 作为全局log的管理入口。后续别的模块下的python文件需要使用日志功能时,需要导入该模块。该模块的原理也很简单,定位到文件路径,然后通过logger的名字获得要用的logger配置,例如我上面的配置文件中:

    [loggers]
    keys=root
    

      所以这里就用了root.然后创建一个全局的logger对象,命名为ta_log:

    #globalLog.py
    import logging
    import logging.config
    import os
    
    def get_logger(name='root'):
        conf_log = os.path.abspath(os.getcwd() + "/resource/logger_config.ini")
        logging.config.fileConfig(conf_log)
        return logging.getLogger(name)
    
    ta_log = get_logger(__name__)
    

    3 使用

      在需要打印日志的地方使用该方法,例如在main.py里通过ta_log.info()打印日志。该方法会打印各个级别的信息进入两个日志文件中。我们在第四步来看一看日志文件的内容:

    import sys
    
    from globalLog import ta_log
    
    if __name__ == '__main__':
        ta_log.info("start")
        try:
            print(1 / 0)
        except Exception:
            ta_log.error("error:")
            ta_log.exception(sys.exc_info())
        ta_log.debug("end")
    

    4 运行程序

      运行程序,检查日志文件。
      这是default.log,级别是info.没有记录ta_log.debug()的信息:

    2018-08-31 13:09:34,928 C:/lzw_programming/test/main.py(6): INFO start
    2018-08-31 13:09:34,928 C:/lzw_programming/test/main.py(10): ERROR error:
    2018-08-31 13:09:34,930 C:/lzw_programming/test/main.py(11): ERROR (<type 'exceptions.ZeroDivisionError'>, ZeroDivisionError('integer division or modulo by zero',), <traceback object at 0x0000000003B38888>)
    Traceback (most recent call last):
      File "C:/lzw_programming/test/main.py", line 8, in <module>
        print(1 / 0)
    ZeroDivisionError: integer division or modulo by zero
    

      这是error.log。级别是error。没有记录ta_log.info()和ta_log.debug()的信息

    2018-08-31 13:09:34,928 C:/lzw_programming/testassist/main.py(10): ERROR error:
    2018-08-31 13:09:34,930 C:/lzw_programming/testassist/main.py(11): ERROR (<type 'exceptions.ZeroDivisionError'>, ZeroDivisionError('integer division or modulo by zero',), <traceback object at 0x0000000003B38888>)
    Traceback (most recent call last):
      File "C:/lzw_programming/testassist/main.py", line 8, in <module>
        print(1 / 0)
    ZeroDivisionError: integer division or modulo by zero
    

    5 结果

      运行了3天主程序,查看是否滚动产生了新的日志信息,结果是把历史日志信息滚动复制到了新的文件里,后缀名为日期,如图。
    在这里插入图片描述

    六 删除文件

      递归地删除文件:

    shutil.rmtree(r'user\tester')
    

    七 判断文件/文件夹是否存在

    if not os.path.exists(path):
          os.makedirs(path)
    

      可以看出用os.path.exists()方法,判断文件和文件夹是一样。
      其实这种方法还是有个问题,假设你想检查文件“test_data”是否存在,但是当前路径下有个叫“test_data”的文件夹,这样就可能出现误判。为了避免这样的情况,可以这样,只检查文件:

    import os
    os.path.isfile("test-data")
    

      通过这个方法,如果文件”test-data”不存在将返回False,反之返回True。

    八 文本文件操作

      Python strip():方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列,返回分割后的列表。

    九 pandas读文件(不把第一行作列属性)

    read_csv("test.cvs",header=None):不把第一行作列属性。

    十 图片显示

    1 opencv

    import cv2
    
    img = cv2.imread("img.jpg")
    cv2.imshow('image', img)
    cv2.waitKey(0)
    

    2 plt

    import matplotlib.pyplot as plt
    from PIL import Image
    
    image= Image.open("img.jpg")
    plt.figure("Image")  # 图像窗口名称
    plt.imshow(image)
    plt.axis('off')  # 关掉坐标轴为 off
    plt.title('image')  # 图像题目
    plt.show()
    

    十一 读取配置文件&&简单封装

      本节内容来自这里
      之前有做过把爬虫数据写到数据库中的练习,这次想把数据库信息抽离到一个ini配置文件中,这样做的好处在于可以在配置文件中添加多个数据库,方便切换(另外配置文件也可以添加诸如邮箱、url等信息)

    1 configparser模块

      python使用自带的configparser模块用来读取配置文件,配置文件的形式类似windows中的ini文件,在使用前需要先安装该模块,使用pip安装即可

    2 configparser读取文件的基本方法

    (1)新建一个config.ini文件,如下

    [Mysql-database]
    host = localhost
    user = 12345657
    db = test
    charset = utf-8
    
    [Email]
    host = http://www.qq.com
    address = 1234@qq.com
    password = 123456
    

    (2)新建一个readconfig.py文件,读取配置文件的信息

    import configparser
    
    cf = configparser.ConfigParser()
    cf.read("E:\Crawler\config.ini")  # 读取配置文件,如果写文件的绝对路径,就可以不用os模块
    
    secs = cf.sections()  # 获取文件中所有的section(一个配置文件中可以有多个配置,如数据库相关的配置,邮箱相关的配置,
                            每个section由[]包裹,即[section]),并以列表的形式返回
    print(secs)
    
    options = cf.options("Mysql-Database")  # 获取某个section名为Mysql-Database所对应的键
    print(options)
    
    items = cf.items("Mysql-Database")  # 获取section名为Mysql-Database所对应的全部键值对
    print(items)
    
    host = cf.get("Mysql-Database", "host")  # 获取[Mysql-Database]中host对应的值
    print(host)
    

    上述代码运行结果如下,可以和config.ini进行对比

    3 引入os模块,使用相对目录读取配置文件

    readconfig.py:

    import configparser
    import os
    
    root_dir = os.path.dirname(os.path.abspath('.'))  # 获取当前文件所在目录的上一级目录,即项目所在目录E:\Crawler
    cf = configparser.ConfigParser()
    cf.read(root_dir+"/config.ini")  # 拼接得到config.ini文件的路径,直接使用
    
    secs = cf.sections()  # 获取文件中所有的section(一个配置文件中可以有多个配置,如数据库相关的配置,邮箱相关的配置,每个section由[]包裹,即[section]),并以列表的形式返回
    print(secs)
    
    options = cf.options("Mysql-Database")  # 获取某个section名为Mysql-Database所对应的键
    print(options)
    
    items = cf.items("Mysql-Database")  # 获取section名为Mysql-Database所对应的全部键值对
    print(items)
    
    host = cf.get("Mysql-Database", "host")  # 获取[Mysql-Database]中host对应的值
    print(host)
    

    或者使用os.path.join()进行拼接

    import configparser
    import os
    
    root_dir = os.path.dirname(os.path.abspath('.'))  # 获取当前文件所在目录的上一级目录,即项目所在目录E:\Crawler
    configpath = os.path.join(root_dir, "config.ini")
    cf = configparser.ConfigParser()
    cf.read(configpath)  # 读取配置文件
    
    secs = cf.sections()  # 获取文件中所有的section(一个配置文件中可以有多个配置,如数据库相关的配置,邮箱相关的配置,每个section由[]包裹,即[section]),并以列表的形式返回
    print(secs)
    
    options = cf.options("Mysql-Database")  # 获取某个section名为Mysql-Database所对应的键
    print(options)
    
    items = cf.items("Mysql-Database")  # 获取section名为Mysql-Database所对应的全部键值对
    print(items)
    
    host = cf.get("Mysql-Database", "host")  # 获取[Mysql-Database]中host对应的值
    print(host)
    

    4.通过读取配置文件,重新写一下之前的requests+正则表达式爬取猫眼电影的例子
    把读取配置文件readconfig.py和操作数据库handleDB.py分别封装到一个类中

    readconfig.py如下

    import configparser
    import os
    
    class ReadConfig:
        """定义一个读取配置文件的类"""
    
        def __init__(self, filepath=None):
            if filepath:
                configpath = filepath
            else:
                root_dir = os.path.dirname(os.path.abspath('.'))
                configpath = os.path.join(root_dir, "config.ini")
            self.cf = configparser.ConfigParser()
            self.cf.read(configpath)
    
        def get_db(self, param):
            value = self.cf.get("Mysql-Database", param)
            return value
    
    
    if __name__ == '__main__':
        test = ReadConfig()
        t = test.get_db("host")
        print(t)
    

    handleDB.py如下

    # coding: utf-8
    # author: hmk
    
    from common.readconfig import ReadConfig
    import pymysql.cursors
    
    
    class HandleMysql:
        def __init__(self):
            self.data = ReadConfig()
    
        def conn_mysql(self):
            """连接数据库"""
            host = self.data.get_db("host")
            user = self.data.get_db("user")
            password = self.data.get_db("password")
            db = self.data.get_db("db")
            charset = self.data.get_db("charset")
            self.conn = pymysql.connect(host=host, user=user, password=password, db=db, charset=charset)
            self.cur = self.conn.cursor()
    
        def execute_sql(self, sql, data):
            """执行操作数据的相关sql"""
            self.conn_mysql()
            self.cur.execute(sql, data)
            self.conn.commit()
    
        def search(self, sql):
            """执行查询sql"""
            self.conn_mysql()
            self.cur.execute(sql)
            return self.cur.fetchall()
    
        def close_mysql(self):
            """关闭数据库连接"""
            self.cur.close()
            self.conn.close()
    
    
    if __name__ == '__main__':
        test = HandleMysql()
        sql = "select * from maoyan_movie"
        for i in test.search(sql):
            print(i)
    

    最后的运行文件,调用前面的方法

    # coding: utf-8
    # author: hmk
    
    import requests
    import re
    from common import handleDB
    
    
    class Crawler:
        """定义一个爬虫类"""
        def __init__(self):
            self.db = handleDB.HandleMysql()
    
        @staticmethod
        def get_html(url, header):
            response = requests.get(url=url, headers=header)
            if response.status_code == 200:
                return response.text
            else:
                return None
    
        @staticmethod
        def get_data(html, list_data):
            pattern = re.compile(r'<dd>.*?<i.*?>(\d+)</i>.*?'  # 匹配电影排名
                                 r'<p class="name"><a.*?data-val=".*?">(.*?)'  # 匹配电影名称
                                 r'</a>.*?<p.*?class="releasetime">(.*?)</p>'  # 匹配上映时间
                                 r'.*?<i.*?"integer">(.*?)</i>'  # 匹配分数的整数位
                                 r'.*?<i.*?"fraction">(.*?)</i>.*?</dd>', re.S)  # 匹配分数小数位
            m = pattern.findall(html)
            for i in m:  # 因为匹配到的所有结果会以列表形式返回,每部电影信息以元组形式保存,所以可以迭代处理每组电影信息
                ranking = i[0]  # 提取一组电影信息中的排名
                movie = i[1]  # 提取一组电影信息中的名称
                release_time = i[2]  # 提取一组电影信息中的上映时间
                score = i[3] + i[4]  # 提取一组电影信息中的分数,这里把分数的整数部分和小数部分拼在一起
                list_data.append([ranking, movie, release_time, score])  # 每提取一组电影信息就放到一个列表中,同时追加到一个大列表里,这样最后得到的大列表就包含所有电影信息
    
        def write_data(self, sql, data):
            self.db.conn_mysql()
            try:
                self.db.execute_sql(sql, data)
                print('导入成功')
            except:
                print('导入失败')
            self.db.close_mysql()
    
        def run_main(self):
            start_url = 'http://maoyan.com/board/4'
            depth = 10  # 爬取深度(翻页)
            header = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
                      "Accept-Encoding": "gzip, deflate, sdch",
                      "Accept-Language": "zh-CN,zh;q=0.8",
                      "Cache-Control": "max-age=0",
                      "Connection": "keep-alive",
                      "Host": "maoyan.com",
                      "Referer": "http://maoyan.com/board",
                      "Upgrade-Insecure-Requests": "1",
                      "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36"}
    
            for i in range(depth):
                url = start_url + '?offset=' + str(10 * i)
                html = self.get_html(url, header)
                list_data = []
                self.get_data(html, list_data)
                for i in list_data:
                    """这里的list_data参数是指正则匹配并处理后的列表数据(是一个大列表,包含所有电影信息,每个电影信息都存在各自的一个列表中;
                    对大列表进行迭代,提取每组电影信息,这样提取到的每组电影信息都是一个小列表,然后就可以把每组电影信息写入数据库了)"""
                    movie = i  # 每组电影信息,这里可以看做是准备插入数据库的每组电影数据
                    sql = "insert into maoyan_movie(ranking,movie,release_time,score) values(%s, %s, %s, %s)"  # sql插入语句
                    self.write_data(sql, movie)
    
    
    if __name__ == '__main__':
        test = Crawler()
        test.run_main()
    
    展开全文
  • 背景: 初学Python,家诚大佬对于我的学习非常关心,为了考察我的Python语法基础,给我出了一道测试。测试内容是找到四级词典中的同字...判断每一行是否为空,若为空就分列把第一列存入列表中 def getWord(line):...

    背景:

    初学Python,家诚大佬对于我的学习非常关心,为了考察我的Python语法基础,给我出了一道测试。测试内容是找到四级词典中的同字词(字母异位词),即两个单词如果包含相同的字母,次序不同,像“silent”和“listen”就是字母易位词。

    算法原理

    1.读每一行,得到所有四级词汇存入newlist
    判断每一行是否为空,若不为空就分列把第一列存入列表中

    def getWord(line):
        newlist = []
        wlist = line.split(' ')
        for x in wlist:
            if x != '':
                newlist.append(x)
        return newlist[0]
    

    2.给出文件位置,定义空字典和位置参数i

    f = open('C:/Users/yllzxzyq/Desktop/1.txt','r',encoding='utf-8')
    dic={}
    i=0
    

    3.调用函数找出同字词并存入dic
    此处出现\n会读入的问题,只好多加一个判断除去。
    然后调用getWord()函数把每一行单词存入word,然后把word字符串转为列表,经sort()函数得到字母a-z的”指纹“。
    通过”指纹“这个特殊参数把每个单词存在包含所有指纹形如finger:{i:word...}类型的字典里。

    for line in f.readlines():
        if line !='\n':
            word=getWord(line)
            flist=list(word)
            flist.sort()
            finger=""
            for z in flist:
                finger+=z
            if finger in dic:
                dic[finger][i]=word
            else:
                dic[finger]={}
                dic[finger][i]=word
            i+=1
    

    4.通过判断value是否大于1输出所有同字词(字母异位词)
    遍历字典,输出所有同字词(字母异位词)

    for value in dic.values():
        if len(value)>1:
            print(value)
    

    测试文件下载链接:四级词汇文档和源代码文件

    展开全文
  • Columnix是式存储格式,类似于 。 该实验的目的是在平面模式下击败Parquet读取性能,同时通过利用诸如类的更新压缩算法来减少磁盘占用量。 Columnix支持: 组 索引(在行组级别文件级别) 向量化...
  • 1. 懂题目 ... 即为i/c行和i%c (3)直接调用python numpy 中的内置函数 reshape 。但运行时间和空间都很高,推荐。 3.代码实现 class Solution(object): def matrixReshape(self, nums, r, c): .
  • 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字文本)。... 一般为每行开头空格,第一行是属性,数据
  • python对csv的操作方法

    2020-01-15 09:56:41
    首先是引入迭代器的操作 import csv # open 打开文件有多种模式,下面是常见的4种 # r:数据,默认模式 # w:写数据,如果已有数据则会先清空 ...统计分析的时候要熟练操作行和列,还有各种函数的...
  • 7.9.3 取出一行中的所有 138 7.10 get_range_slices 138 7.11 multiget_slice 140 7.12 删除 142 7.13 批量变更 144 7.13.1 批量删除 144 7.13.2 区间鬼影 145 7.14 编程定义keyspace和列族 145 ...
  • 3.4.1 有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。如何按照query的频度排序? 3.4.2 蚂蚁爬杆问题 3.4.3 当在浏览器中输入一个url后回车,后台发生了什么?比如...
  • PostgreSQL必备参考手册--详细书签版

    热门讨论 2013-02-04 13:28:35
    第一部分(第1章)出了PostgreSQL 7.1版本支持的所有SQL命令。第二部分(第2章到第5章)介绍了PostgreSQL的数据类型、操作符及函数等内容。第三部分(第6章到第10章)通过介绍用户可执行文件、系统可执行文件、...
  • 谈谈感想吧,别听什么培训机构诳你什么爬虫工程师有前途啥的,当然学好学精爬虫也能拿到高薪,但这一行也有不少人了,精通的自然不用说。而且现在有很多像八爪鱼、火车头这些可以定制的爬虫软件,还有一些自学习的...
  • antlr4权威指南

    2017-09-30 10:47:22
     本部分的最后章解决了一些充满挑战的识别难题,例如识别XML和Python中的上下文相关的换符。  四部分是参考章节,详细出了ANTLR语法元语言的所有规则ANTLR运行库的用法。  完全了解语法语言识别...
  • 关于Ghostcat(幽灵猫CVE-2020-1938漏洞):CNVD-2020-10487(CVE-2020-1938), tomcat ajp 文件读取漏洞poc|Java版本POC|Tomcat-Ajp协议文件读取漏洞|又python版本CVE-2020-1938漏洞检测|CVE-2020-1938-漏洞复现...
  • Guns : 我在上大学的时候就了解接触过了这个项目,当时我还是个 Spring 入门太久的小菜鸟。一晃,不经意间已经过去快 3 年了。Guns 功能齐全 ,采用主流框架 Spring Boot2.0+开发,并且支持 Spring Cloud ...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    和第二类开发者类似。开发者提交的应用开发数目远超游戏开发。 任务2 软件开发计划 任务2 软件开发计划 软件开发计划 软件开发计划 问题定义-案例 项目可行性 软件开发计划 软件开发计划 可行性分析...
  • 程序猿的第一本互联网黑话指南 我感觉,我可能要拿图灵奖了。。。 包 常用官方包说明 常用第三方包说明 常用框架 完整标准库列表 优秀的第三方库 音频音乐 数据结构:Go中的通用数据结构算法 分布式系统:Go...
  • 只要拿到数据的第一个 chunk 就可以进行处理了 <p><img alt="" src="https://github.com/ccforward/cc/raw/master/Blog/pic/node-streams.png" /></p> <p>Node中有四种数据流: 1. Readable 2. Writable 写...
  • ✅ 小书匠:款专注于写作的 Markdown 笔记软件,支持多种三方存储(印象笔记,有道笔记,为知笔记,Github,Gitee等) Banny(杭州) - Github ✅ 我的小目标:个人积分管理软件,督促用户成为更好的自己 ✅ 红色...

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

python不读第一行和第一列

python 订阅