1、获得文件夹中所有文件的名称列表(Mac环境)
Mac环境下,隐藏文件为".DS_Store"
os.listdir()函数得到的是仅当前路径下的文件名,不包括子目录中的文件,所有需要使用递归的方法得到全部文件名。
import os
import json
path = 'Users/juanmao/Desktop/xxx'
files = os.listdir(path)
for file in files:
# 判断是否是文件夹
if not os.path.isdir(file):
# 判断是否是隐藏文件:.DS_Store
if not file.endsith(".DS_Store"):
# 打开文件
f = open(path + "/" + file)
fileJson = json.load(f)
book_list = fileJson['data']['books']
for book in book_list:
print('\n')
print(book[title])
print(book[author])
print(book[score])
题外知识:
.DS_Store是Mac OS保存文件夹的自定义属性的隐藏文件,如文件的图标位置或背景色,相当于Windows的desktop.ini。
1,禁止.DS_store生成:
打开 “终端” ,复制黏贴下面的命令,回车执行,重启Mac即可生效。
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
2,恢复.DS_store生成:
defaults delete com.apple.desktopservices DSDontWriteNetworkStores
2、os.path.splitext() 方法:
该方法返回两个元素, 第一个是路径去掉后缀的部分, 第二个是文件后缀。(图片引用他人)
3、request库请求网页,返回乱码处理
3.1使用chardet
import requests
import chardet
headers = {
"xxx": "xxx"
}
r = requests.get(url, headers=headers)
r.raise_for_status()
# 获取网页编码格式 chardet有概率误识
charset_dict = chardet.detect(r.content)
charset = charset_dict.get("encoding")
print("网页编码:" + str(charset))
r.encoding = charset
备注:抓取百度网页的时候,解析某些网页还是会出现乱码
3.2从网页html的meta中抽取
import requests
headers = {
"xxx": "xxx"
}
r = requests.get(url, headers=headers)
r.raise_for_status()
print("网页编码:" + str(requests.utils.get_encodings_from_content(r.text)))
# 可以查看获取的list,选择字符编码
r.encoding = requests.utils.get_encodings_from_content(r.text)[0]
备注:这种方式相对准确,以上使用chardet方式解析百度网页字符编码出现乱码的情况,此种方式能解决
4、代码输出异常信息(使用traceback库)
import traceback
url="https://www.baidu.com"
headers = {
"xxx": "xxx"
}
r = requests.get(url, headers=headers)
r.raise_for_status()
html = r.text
'''
lxml的方式解析页面
'''
try:
xpath_html = etree.HTML(html)
a_title_list = xpath_html.xpath(
"//div[@id='wrapper']/div[@id='wrapper_wrapper']/div[@id='container']/div[@id='content_left']/div[@id='1']//h3/a")
result = ''
for a_title in a_title_list:
result = result + a_title.xpath("string(.)").strip().replace("\n", "") + " "
except Exception as err:
traceback.print_exc()
5、识别字符串是否是乱码
背景:抓取某些网页的内容为乱码。调用以下函数识别乱码,后续对乱码进行处理
def if_contain_chaos(keyword):
try:
'''
使用gb2312编码集时,
gbk是gb2312的扩展,更能准确的识别乱码,误识率较低
'''
# keyword.encode("gb2312")
keyword.encode("gbk")
except UnicodeEncodeError:
return True
return False