想问下,怎么用Python通过行和列提取数据根据提取指定关键词下面的所有列和行的数据呢?

本文介绍了python关键字匹配(关键字列表-列)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

我有关键字像这样的列表

在此数据集中,匹配列'Value'-[关键字列表]

*我的意思是匹配是'Value中列表中的关键字'

我想看看列表中的关键字如何匹配列,
这样..我想找出匹配率是多少。

'查找关键字和列之间的匹配率'
百分比,如果可以的话,过滤数据框

在我的真实数据集中,句子中有关键字

因此,如果使用关键字-关键字匹配(1:1),则无效。



管道 | 是正则表达式中的运算符:

因此我们通过管道将单词列表与这些单词之一匹配:

因此在正则表达式中我们现在有这样的语句:


这篇关于python关键字匹配(关键字列表-列)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

}

如果你在寻找python工作,那你的面试可能会涉及Python相关的问题。

通过对网络资料的收集整理,本文列出了100道python的面试题以及答案,你可以根据需求阅读测试。

平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

上述代码将有助于从IMDb的前250名列表中删除数据。

当我们不知道向函数传递多少参数时,比如我们向传递一个列表或元组,我们就使用*args:

在我们不知道该传递多少关键字参数时,使用**kwargs来收集关键字参数:

Q53.解释如何从C访问用Python编写的模块?

您可以通过以下方法访问C中用Python编写的模块:

Q55.怎么移除一个字符串中的前导空格?

字符串中的前导空格就是出现在字符串中第一个非空格字符前的空格。我们使用方法Istrip()可以将它从字符串中移除。

最初的字符串当中既有前导字符也有后缀字符,调用Istrip()去除了前导空格,如果我们想去除后缀空格,可以使用rstrip()方法。

Q57.在Python中怎样将字符串转换为整型变量?

如果字符串只含有数字字符,可以用函数int()将其转换为整数。

我们检查一下变量类型:

Q58.在Python中如何生成一个随机数?

要想生成随机数,我们可以从random模块中导入函数random()。

我们还可以使用函数randint(),它会用两个参数表示一个区间,返回该区间内的一个随机整数。

Q59.怎样将字符串中第一个字母大写?

Q60.如何检查字符串中所有的字符都为字母数字?

对于这个问题,我们可以使用isalnum()方法。

我们还可以用其它一些方法:

Python中的连接就是将两个序列连在一起,我们使用+运算符完成:

这里运行出错,因为(4)被看作是一个整数,修改一下再重新运行:

在调用一个函数的过程中,直接或间接地调用了函数本身这个就叫递归。但为了避免出现死循环,必须要有一个结束条件,举个例子:

Q63.什么是生成器?

生成器会生成一系列的值用于迭代,这样看它又是一种可迭代对象。它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。我们定义一个能逐个“yield”值的函数,然后用一个for循环来迭代它。

Q64.什么是迭代器?

迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。我们使用inter()函数创建迭代器。

#每次想获取一个对象时,我们就调用next()函数

Q65.请说说生成器和迭代器之间的区别

1)在使用生成器时,我们创建一个函数;在使用迭代器时,我们使用内置函数iter()和next();

2)在生成器中,我们使用关键字‘yield’来每次生成/返回一个对象;

3)生成器中有多少‘yield’语句,你可以自定义;

4)每次‘yield’暂停循环时,生成器会保存本地变量的状态。而迭代器并不会使用局部变量,它只需要一个可迭代对象进行迭代;

5)使用类可以实现你自己的迭代器,但无法实现生成器;

6)生成器运行速度快,语法简洁,更简单;

7)迭代器更能节约内存。

Python新手可能对这个函数不是很熟悉,zip()可以返回元组的迭代器。

在这里zip()函数对两个列表中的数据项进行了配对,并用它们创建了元组。

Q67.如何用Python找出你目前在哪个目录?

我们可以使用函数/方法getcwd(),从模块os中将其导入。

Q68.如何计算一个字符串的长度?

这个也比较简单,在我们想计算长度的字符串上调用函数len()即可。

Q69.如何从列表中删除最后一个对象?

从列表中删除并返回最后一个对象或obj。

Q70.解释一些在Python中实现面向功能的编程的方法

有时,当我们想要遍历列表时,一些方法会派上用场。

过滤器允许我们根据条件逻辑过滤一些值。

Map将函数应用于iterable中的每个元素。

在我们达到单个值之前,Reduce会反复减少序列顺序。

Q71.编写一个Python程序来计算数字列表的总和

Q72.编写一个Python程序来读取文件中的随机行

Q73.编写一个Python程序来计算文本文件中的行数

Q74.请写一个Python逻辑,计算一个文件中的大写字母数量

Q75.在Python中为数值数据集编写排序算法

以下代码可用于在Python中对列表进行排序:

Q76.请解释或描述一下Django的架构

对于Django框架遵循MVC设计,并且有一个专有名词:MVT,M全拼为Model,与MVC中的M功能相同,负责数据处理,内嵌了ORM框架;V全拼为View,与MVC中的C功能相同,接收HttpRequest,业务处理,返回HttpResponse;T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html,内嵌了模板引擎

Flask是一个“微框架”,主要用于具有更简单要求的小型应用程序。Pyramid适用于大型应用程序,具有灵活性,允许开发人员为他们的项目使用数据库,URL结构,模板样式等正确的工具。Django也可以像Pyramid一样用于更大的应用程序。它包括一个ORM。

开发人员提供模型,视图和模板,然后将其映射到URL,Django可以为用户提供服务。

Q79.解释如何在Django中设置数据库

Django使用SQLite作为默认数据库,它将数据作为单个文件存储在文件系统中。

如过你有数据库服务器-PostgreSQL,MySQL,Oracle,MSSQL-并且想要使用它而不是SQLite,那么使用数据库的管理工具为你的Django项目创建一个新的数据库。

无论哪种方式,在您的(空)数据库到位的情况下,剩下的就是告诉Django如何使用它。这是项目的settings.py文件的来源。

我们将以下代码行添加到setting.py文件中:

这是我们在Django中使用write一个视图的方法:

返回当前日期和时间,作为HTML文档。

模板是一个简单的文本文件。它可以创建任何基于文本的格式,如XML,CSV,HTML等。模板包含在评估模板时替换为值的变量和控制模板逻辑的标记(%tag%)。

Q82.在Django框架中解释会话的使用?

Django提供的会话允许您基于每个站点访问者存储和检索数据。Django通过在客户端放置会话ID cookie并在服务器端存储所有相关数据来抽象发送和接收cookie的过程。

所以数据本身并不存储在客户端。从安全角度来看,这很好。

在Django中,有三种可能的继承样式:

抽象基类:当你只希望父类包含而你不想为每个子模型键入的信息时使用;

多表继承:对现有模型进行子类化,并且需要每个模型都有自己的数据库表。

代理模型:只想修改模型的Python级别行为,而无需更改模型的字段。

map函数执行作为第一个参数给出的函数,该函数作为第二个参数给出的iterable的所有元素。如果给定的函数接受多于1个参数,则给出了许多迭代。

Q85.如何在NumPy数组中获得N个最大值的索引?

我们可以使用下面的代码在NumPy数组中获得N个最大值的索引:

Q87.NumPy阵列在(嵌套)Python列表中提供了哪些优势?

1)Python的列表是高效的通用容器。

它们支持(相当)有效的插入,删除,追加和连接,Python的列表推导使它们易于构造和操作。

它们不支持元素化加法和乘法等“向量化”操作,可以包含不同类型的对象这一事实意味着Python必须存储每个元素的类型信息,并且必须在操作时执行类型调度代码在每个元素上。

3)NumPy不仅效率更高,也更方便

你可以获得大量的矢量和矩阵运算,这有时可以避免不必要的工作。

你可以使用NumPy,FFT,卷积,快速搜索,基本统计,线性代数,直方图等内置。

Q88.解释装饰器的用法

Python中的装饰器用于修改或注入函数或类中的代码。使用装饰器,您可以包装类或函数方法调用,以便在执行原始代码之前或之后执行一段代码。装饰器可用于检查权限,修改或跟踪传递给方法的参数,将调用记录到特定方法等

1)在理想的世界中,NumPy只包含数组数据类型和最基本的操作:索引,排序,重新×××,基本元素函数等。

2)所有数字代码都将驻留在SciPy中。然而,NumPy的一个重要目标是兼容性,因此NumPy试图保留其前任任何一个支持的所有功能。

3)因此,NumPy包含一些线性代数函数,即使它们更恰当地属于SciPy。无论如何,SciPy包含更多全功能的线性代数模块版本,以及许多其他数值算法。

4)如果你使用python进行科学计算,你应该安装NumPy和SciPy。大多数新功能属于SciPy而非NumPy。

与2D绘图一样,3D图形超出了NumPy和SciPy的范围,但就像2D情况一样,存在与NumPy集成的包。Matplotlib在mplot3d子包中提供基本的3D绘图,而Mayavi使用功能强大的VTK引擎提供各种高质量的3D可视化功能。

1) scrapy是一个Python爬虫框架,爬取效率极高,具有高度定制性,但是不支持分布式。

而scrapy-redis一套基于redis数据库、运行在scrapy框架之上的组件,可以让scrapy支持分布式策略,Slaver端共享Master端redis数据库里的item队列、请求队列和请求指纹集合。

2) 因为redis支持主从同步,而且数据都是缓存在内存中的,所以基于redis的分布式爬虫,对请求和数据的高频读取效率非常高。

Q92.你用过的爬虫框架或者模块有哪些?

urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。

scrapy是封装起来的框架,他包含了下载器,解析器,日志及异常处理,基于多线程, twisted的方式处理,对于固定单个网站的爬取开发,有优势;但是对于多网站爬取 100个网站,并发及分布式处理方面,不够灵活,不便调整与括展。

request 是一个HTTP库, 它只是用来,进行请求,对于HTTP请求,他是一个强大的库,下载,解析全部自己处理,灵活性更高,高并发与分布式部署也非常灵活,对于功能可以更好实现。

Q93.你常用的mysql引擎有哪些?各引擎间有什么区别?

1)InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高

级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM

2)MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到

扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即

7)对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM

表中可以和其他字段一起建立联合索引;

8)清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重

Q94.描述下scrapy框架运行的机制?

从start_urls里获取第一批url并发送请求,请求由引擎交给调度器入请求队列,获取完毕后,

调度器将请求队列里的请求交给下载器去获取请求对应的响应资源,并将响应交给自己编写的解析方法做提取处理:

1) 如果提取出需要的数据,则交给管道文件处理;

2)如果提取出url,则继续执行之前的步骤(发送url请求,并由引擎将请求交给调度器入队列...),直到请求队列里没有请求,程序结束。

Q95.什么是关联查询,有哪些?

将多个表联合起来进行查询,主要有内连接、左连接、右连接、全连接(外连接)

Q96.写爬虫是用多进程好?还是多线程好? 为什么?

IO密集型代码(文件处理、网络爬虫等),多线程能够有效提升效率(单线程下有IO操作会进行IO等待,造成不必要的时间浪费,

而开启多线程能在线程A等待时,自动切换到线程B,可以不浪费CPU的资源,从而能提升程序执行效率)。

在实际的数据采集过程中,既考虑网速和响应的问题,也需要考虑自身机器的硬件情况来设置多进程或多线程。

Q97.数据库的优化?

1)优化索引、SQL 语句、分析慢查询;

3)采用MySQL 内部自带的表分区技术,把数据分层不同的文件,能够提高磁

4)选择合适的表引擎,参数上的优化;

5)进行架构级别的缓存,静态化和分布式;

6)采用更快的存储方式,例如 NoSQL存储经常访问的数据

Q98.分布式爬虫主要解决什么问题?

Q99.爬虫过程中验证码怎么处理?

Q100.常见的反爬虫和应对方法?

从用户请求的Headers反爬虫是最常见的反爬虫策略。可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。

2)基于用户行为反爬虫

通过检测用户行为,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。

大多数网站都是前一种情况,对于这种情况,使用IP代理就可以解决。

可以专门写一个爬虫,爬取网上公开的代理ip,检测后全部保存起来。

有了大量代理ip后可以每请求几次更换一个ip,这在requests或者urllib2中很容易做到,这样就能很容易的绕过第一种反爬虫。

对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求。

有些有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制。

首先用Fiddler对网络请求进行分析,如果能够找到ajax请求,也能分析出具体的参数和响应的具体含义,我们就能采用上面的方法。

直接利用requests或者urllib2模拟ajax请求,对响应的json进行分析得到需要的数据。

但是有些网站把ajax请求的所有参数全部加密了,没办法构造自己所需要的数据的请求。

这种情况下就用selenium+phantomJS,调用浏览器内核,并利用phantomJS执行js来模拟人为操作以及触发页面中的js脚本。

}

要了解程序设置,请查看。

源码安装的用户可以在weiboSpider目录运行如下命令,pip安装的用户可以在任意有写权限的目录运行如下命令

第一次执行,会自动在当前目录创建config.json配置文件,配置好后执行同样的命令就可以获取微博了。

如果你想指定文件(csv、txt、json、图片、视频)保存路径,可以通过output_dir参数设定。假如你想把文件保存到/home/weibo/目录,可以运行如下命令:

如果你想通过命令行输入user_id,可以使用参数u,可以输入一个或多个user_id,每个user_id以英文逗号分开,如果这些user_id中有重复的user_id,程序会自动去重。命令行如下:

程序会获取user_id分别为和的微博用户的微博,后面会讲。该方式的所有user_id使用config.json中的since_date和end_date设置,通过修改它们的值可以控制爬取的时间范围。若config.json中的user_id_list是文件路径,每个命令行中的user_id都会自动保存到该文件内,且自动更新since_date;若不是路径,user_id会保存在当前目录的user_id_list.txt内,且自动更新since_date,若当前目录下不存在user_id_list.txt,程序会自动创建它。

个性化定制程序(可选)

本部分为可选部分,如果不需要个性化定制程序或添加新功能,可以忽略此部分。

本程序主体代码位于weibo_spider.py文件,程序主体是一个 Spider 类,上述所有功能都是通过在main函数调用 Spider 类实现的,默认的调用代码如下:

用户可以按照自己的需求调用或修改 Spider 类。通过执行本程序,我们可以得到很多信息。

wb.weibo:除不包含上述信息外,wb.weibo包含爬取到的所有微博信息,如微博id微博正文原始图片url发布位置发布时间发布工具点赞数转发数评论数等。如果爬的是全部微博(原创+转发),除上述信息之外,还包含被转发微博原始图片url是否为原创微博等。wb.weibo是一个列表,包含了爬取的所有微博信息。wb.weibo[0]为爬取的第一条微博,wb.weibo[1]为爬取的第二条微博,以此类推。当filter=1时,wb.weibo[0]为爬取的第一条原创微博,以此类推。wb.weibo[0]['id']为第一条微博的id,wb.weibo[0]['content']为第一条微博的正文,wb.weibo[0]['publish_time']为第一条微博的发布时间,还有其它很多信息不在赘述,大家可以点击下面的"详情"查看具体用法。

若目标微博用户存在微博,则:

  • original_pictures:存储原创微博的原始图片url和转发微博转发理由中的图片url。如wb.weibo[0]['original_pictures']为最新一条微博的原始图片url,若该条微博有多张图片,则存储多个url,以英文逗号分割;若该微博没有图片,则值为"无";
  • retweet_pictures:存储被转发微博中的原始图片url。当最新微博为原创微博或者为没有图片的转发微博时,则值为"无",否则为被转发微博的图片url。若有多张图片,则存储多个url,以英文逗号分割;

定期自动爬取微博(可选)

要想让程序每个一段时间自动爬取,且爬取的内容为新增加的内容(不包括已经获取的微博),请查看。

要了解获取cookie方法,请查看。

要了解获取user_id方法,请查看,该文档介绍了如何获取一个及多个微博用户user_id的方法。

如果运行程序的过程中出现错误,可以查看页面,里面包含了最常见的问题及解决方法。如果出现的错误不在常见问题里,您可以通过寻求帮助,我们会很乐意为您解答。

  • - 功能和本项目完全一样,可以不添加cookie,获取的微博属性更多;
  • 可以连续获取一个或多个微博关键词搜索结果,并将结果写入文件(可选)、数据库(可选)等。所谓微博关键词搜索即:搜索正文中包含指定关键词的微博,可以指定搜索的时间范围。对于非常热门的关键词,一天的时间范围,可以获得1000万以上的搜索结果,N天的时间范围就可以获得1000万 X N搜索结果。对于大多数关键词,一天产生的相应微博数量应该在1000万条以下,因此可以说该程序可以获得大部分关键词的全部或近似全部的搜索结果。而且该程序可以获得搜索结果的所有信息,本程序获得的微博信息该程序都能获得。

欢迎为本项目贡献力量。贡献可以是提交代码,可以是通过issue提建议(如新功能、改进方案等),也可以是通过issue告知我们项目存在哪些bug、缺点等,具体贡献方式见。

感谢所有为本项目贡献力量的朋友,贡献者详情见页面。

1.user_id不能为爬虫微博的user_id。因为要爬微博信息,必须先登录到某个微博账号,此账号我们姑且称为爬虫微博。爬虫微博访问自己的页面和访问其他用户的页面,得到的网页格式不同,所以无法爬取自己的微博信息;如果想要爬取爬虫微博内容,可以参考;

2.cookie有期限限制,大约三个月。若提示cookie错误或已过期,需要重新更新cookie。

}

我要回帖

更多关于 Python通过行和列提取数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信