diff --git a/Images/file1.png b/Images/file1.png new file mode 100644 index 0000000..5617761 Binary files /dev/null and b/Images/file1.png differ diff --git a/Images/file2.png b/Images/file2.png new file mode 100644 index 0000000..be0bb9b Binary files /dev/null and b/Images/file2.png differ diff --git a/Images/file3.png b/Images/file3.png new file mode 100644 index 0000000..4ae4abd Binary files /dev/null and b/Images/file3.png differ diff --git a/Images/homework6.1.png b/Images/homework6.1.png new file mode 100644 index 0000000..c8633db Binary files /dev/null and b/Images/homework6.1.png differ diff --git a/Images/homework71.png b/Images/homework71.png new file mode 100644 index 0000000..2985a1f Binary files /dev/null and b/Images/homework71.png differ diff --git a/Images/homework71_2.png b/Images/homework71_2.png new file mode 100644 index 0000000..f4e3d62 Binary files /dev/null and b/Images/homework71_2.png differ diff --git a/Images/homework71_3.png b/Images/homework71_3.png new file mode 100644 index 0000000..72eec31 Binary files /dev/null and b/Images/homework71_3.png differ diff --git "a/\347\254\2547\351\203\250\345\210\206 \346\226\207\344\273\266\345\222\214\346\225\260\346\215\256\346\240\274\345\274\217\345\214\226.ipynb" "b/\347\254\2547\351\203\250\345\210\206 \346\226\207\344\273\266\345\222\214\346\225\260\346\215\256\346\240\274\345\274\217\345\214\226.ipynb" new file mode 100644 index 0000000..7dfdec3 --- /dev/null +++ "b/\347\254\2547\351\203\250\345\210\206 \346\226\207\344\273\266\345\222\214\346\225\260\346\215\256\346\240\274\345\274\217\345\214\226.ipynb" @@ -0,0 +1,3050 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

Python程序设计与应用
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#
第七部分 文件和数据格式化
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 知识点\n", + "* 文件、目录、路径的基本概念。\n", + "* 从文件中读取数据的办法、语句(或函数、方法)。\n", + "* 讲解向文件中写入数据的办法、语句(或函数、方法)。\n", + "* 处理CSV 文件和JSON 数据" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 预习\n", + "* 第7章:文件和数据格式化" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "当程序运行时,变量是保存数据的好方法,但如果希望程序结束后数据仍然保持,就需要将数据保存到文件中。另外,在人事管理系统中,你不会希望每次都手动从文件中复制粘贴人事信息到你的代码里。\n", + "\n", + "你可以认为文件的内容是一个字符串值,大小可能有几个GB。\n", + "\n", + "在本部分中,你将学习如何使用Python 在硬盘上创建、读取和保存文件。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. 文件与文件路径\n", + "文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象,类似地,函数是程序的集合和抽象。用文件形式组织和表达数据更有效也更为灵活。\n", + "\n", + "文件有两个关键属性:“文件名”(通常写成一个单词)和“路径”。路径指明了文件在计算机上的位置。例如,我的电脑本上有一个文件名为projects.docx,\n", + "它的路径在C:\\Users\\asweigart\\Documents。文件名中,最后一个句点之后的部分称为文件的“扩展名”,它指出了文件的类型。project.docx 是一个Word 文档,Users、asweigart和Documents 都是指“文件夹”(也成为目录)。文件夹可以包含文件和其他文件夹。\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.1 Windows 上的倒斜杠以及OS X 和Linux 上的正斜杠\n", + "在Windows 上,路径书写使用倒斜杠作为文件夹之间的分隔符。但在OS X 和Linux 上,使用正斜杠作为它们的路径分隔符。如果想要程序运行在所有操作系统\n", + "上,在编写Python 脚本时,就必须处理这两种情况。\n", + "\n", + "好在,用os.path.join()函数来做这件事很简单。如果将单个文件和路径上的文件夹名称的字符串传递给它,**os.path.join()**就会返回一个文件路径的字符串,包含正确的路径分隔符。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'users\\\\swufe\\\\Documents\\\\python.docx'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "os.path.join('users','swufe','Documents','python.docx')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "如果需要创建文件名称的字符串,os.path.join()函数就很有用。这些字符串将传递给几个文件相关的函数,本部分将进行介绍。例如,下面的例子将一个文件名列表中的名称,添加到文件夹名称的末尾:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d:\\Pictures\\2019-01-10-1.jpg\n", + "d:\\Pictures\\myPhoto1.png\n", + "d:\\Pictures\\mountain.jpg\n" + ] + } + ], + "source": [ + "myFiles = ['2019-01-10-1.jpg', 'myPhoto1.png', 'mountain.jpg']\n", + "for fileName in myFiles:\n", + " print(os.path.join('d:\\\\Pictures', fileName))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.2 当前工作目录\n", + "每个运行在计算机上的程序,都有一个“当前工作目录”,或cwd。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。利用**os.getcwd()**函数,可以取得当前工作路径的字符串,并可以利用**os.chdir()**改变它。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'D:\\\\SynologyDrive\\\\学校文档\\\\教学文档\\\\程序设计与应用Python\\\\课件'" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "os.getcwd()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "os.chdir(\"c:\\\\windows\\\\system32\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'c:\\\\windows\\\\system32'" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.getcwd()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.3 绝对路径与相对路径\n", + "有两种方法指定一个文件路径。\n", + "* “绝对路径”,总是从根文件夹开始。\n", + "* “相对路径”,它相对于程序的当前工作目录。\n", + "\n", + "还有点(.)和点点(..)文件夹。它们不是真正的文件夹,而是可以在路径中使用的特殊名称。单个的句点(“点”)用作文件夹目名称时,是“这个目录”的缩写。两个句点(“点点”)意思是父文件夹。\n", + "\n", + "os.path 模块提供了一些函数,返回一个相对路径的绝对路径,以及检查给定的\n", + "路径是否为绝对路径。\n", + "* 调用**os.path.abspath(path)**将返回参数的绝对路径的字符串。这是将相对路径转换为绝对路径的简便方法。\n", + "* 调用**os.path.isabs(path)**,如果参数是一个绝对路径,就返回True,如果参数是一个相对路径,就返回False。\n", + "* 调用**os.path.relpath(path, start)**将返回从start 路径到path 的相对路径的字符串。如果没有提供start,就使用当前工作目录作为开始路径。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'c:\\\\windows\\\\system32'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.abspath('.')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'c:\\\\windows\\\\system32\\\\Scripts'" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.abspath('.\\\\Scripts')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.isabs('.')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Windows'" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.relpath('C:\\\\Windows', 'C:\\\\')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'..\\\\..\\\\Windows'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.relpath('C:\\\\Windows', 'C:\\\\Pictures\\\\2018')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "调用os.path.dirname(path)将返回一个字符串,它包含path 参数中最后一个斜杠之前的所有内容。调用**os.path.basename(path)**将返回一个字符串,它包含path 参数中最后一个斜杠之后的所有内容。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "path = 'C:\\\\Windows\\\\System32\\\\calc.exe'" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'calc.exe'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.basename(path)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'C:\\\\Windows\\\\System32'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.dirname(path)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "如果同时需要一个路径的目录名称和基本名称,就可以调用**os.path.split()**,获得这两个字符串的元组,像这样:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "('C:\\\\Windows\\\\System32', 'calc.exe')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "calcFilePath = 'C:\\\\Windows\\\\System32\\\\calc.exe'\n", + "os.path.split(calcFilePath)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "同时也请注意,os.path.split()不会接受一个文件路径并返回每个文件夹的字符串的列表。如果需要这样,请使用split()字符串方法,并根据os.path.sep 中的字符串进行分割。回忆一下,根据程序运行的计算机,**os.path.sep**变量设置为正确的文件夹分割斜杠。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['C:', 'Windows', 'System32', 'calc.exe']" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "calcFilePath.split(os.path.sep)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.4 用os.makedirs()创建新文件夹\n", + "程序可以用os.makedirs()函数创建新文件夹(目录)。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "os.makedirs(\"c:\\\\myFolder\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.5 查看文件大小和文件夹内容" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "一旦有办法处理文件路径,就可以开始搜集特定文件和文件夹的信息。os.path 模块提供了一些函数,用于查看文件的字节数以及给定文件夹中的文件和子文件夹。\n", + "* 调用**os.path.getsize(path)**将返回path 参数中文件的字节数。\n", + "* 调用os.listdir(path)将返回文件名字符串的列表,包含path 参数中的每个文件(请注意,这个函数在os 模块中,而不是os.path)。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "27648" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.getsize('C:\\\\Windows\\\\System32\\\\calc.exe')" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['0409',\n", + " '1029',\n", + " '1033',\n", + " '1036',\n", + " '1040',\n", + " '1045',\n", + " '1046',\n", + " '1049',\n", + " '1055',\n", + " '3082',\n", + " '8f629a03-482f-49f2-a27e-279f8764e5cf_HyperV-Compute-Host.dll',\n", + " '@AudioToastIcon.png',\n", + " '@BackgroundAccessToastIcon.png',\n", + " '@bitlockertoastimage.png',\n", + " '@edptoastimage.png',\n", + " '@EnrollmentToastIcon.png',\n", + " '@language_notification_icon.png',\n", + " '@optionalfeatures.png',\n", + " '@VpnToastIcon.png',\n", + " '@WiFiNotificationIcon.png',\n", + " '@windows-hello-V4.1.gif',\n", + " '@WindowsHelloFaceToastIcon.png',\n", + " '@WindowsUpdateToastIcon.contrast-black.png',\n", + " '@WindowsUpdateToastIcon.contrast-white.png',\n", + " '@WindowsUpdateToastIcon.png',\n", + " '@WirelessDisplayToast.png',\n", + " '@WwanNotificationIcon.png',\n", + " '@WwanSimLockIcon.png',\n", + " 'aadauthhelper.dll',\n", + " 'aadcloudap.dll',\n", + " 'aadjcsp.dll',\n", + " 'aadtb.dll',\n", + " 'aadWamExtension.dll',\n", + " 'abcCertFirm.dll',\n", + " 'AbcEbankSign.dll',\n", + " 'ABCEBankSignCtrl.ocx',\n", + " 'abchFTCX22.dll',\n", + " 'abchFTCX23.dll',\n", + " 'abcsFTCX22.dll',\n", + " 'abcsFTCX23.dll',\n", + " 'AboutSettingsHandlers.dll',\n", + " 'AboveLockAppHost.dll',\n", + " 'accessibilitycpl.dll',\n", + " 'accountaccessor.dll',\n", + " 'AccountsRt.dll',\n", + " 'AcGenral.dll',\n", + " 'AcLayers.dll',\n", + " 'acledit.dll',\n", + " 'aclui.dll',\n", + " 'acmigration.dll',\n", + " 'ACPBackgroundManagerPolicy.dll',\n", + " 'acppage.dll',\n", + " 'acproxy.dll',\n", + " 'AcSpecfc.dll',\n", + " 'ActionCenter.dll',\n", + " 'ActionCenterCPL.dll',\n", + " 'ActionQueue.dll',\n", + " 'ActivationClient.dll',\n", + " 'ActivationManager.dll',\n", + " 'ActivationVdev.dll',\n", + " 'activeds.dll',\n", + " 'activeds.tlb',\n", + " 'ActiveSyncCsp.dll',\n", + " 'ActiveSyncProvider.dll',\n", + " 'actxprxy.dll',\n", + " 'AcWinRT.dll',\n", + " 'AcXtrnal.dll',\n", + " 'AdaptiveCards.dll',\n", + " 'AddressParser.dll',\n", + " 'adhapi.dll',\n", + " 'adhsvc.dll',\n", + " 'AdmTmpl.dll',\n", + " 'adprovider.dll',\n", + " 'adrclient.dll',\n", + " 'adsldp.dll',\n", + " 'adsldpc.dll',\n", + " 'adsmsext.dll',\n", + " 'adsnt.dll',\n", + " 'adtschema.dll',\n", + " 'AdvancedEmojiDS.dll',\n", + " 'AdvancedInstallers',\n", + " 'advapi32.dll',\n", + " 'advapi32res.dll',\n", + " 'advpack.dll',\n", + " 'aeevts.dll',\n", + " 'aeinv.dll',\n", + " 'aepic.dll',\n", + " 'af-ZA',\n", + " 'AgentService.exe',\n", + " 'aitstatic.exe',\n", + " 'AJRouter.dll',\n", + " 'alg.exe',\n", + " 'altspace.dll',\n", + " 'am-et',\n", + " 'amcompat.tlb',\n", + " 'amsi.dll',\n", + " 'amsiproxy.dll',\n", + " 'amstream.dll',\n", + " 'Analog.Shell.Broker.dll',\n", + " 'AnalogCommonProxyStub.dll',\n", + " 'apds.dll',\n", + " 'APHostClient.dll',\n", + " 'APHostRes.dll',\n", + " 'APHostService.dll',\n", + " 'ApiSetHost.AppExecutionAlias.dll',\n", + " 'apisetschema.dll',\n", + " 'AppContracts.dll',\n", + " 'AppExtension.dll',\n", + " 'apphelp.dll',\n", + " 'Apphlpdm.dll',\n", + " 'AppHostRegistrationVerifier.exe',\n", + " 'appidapi.dll',\n", + " 'appidcertstorecheck.exe',\n", + " 'appidpolicyconverter.exe',\n", + " 'AppIdPolicyEngineApi.dll',\n", + " 'appidsvc.dll',\n", + " 'appidtel.exe',\n", + " 'appinfo.dll',\n", + " 'appinfoext.dll',\n", + " 'ApplicationFrame.dll',\n", + " 'ApplicationFrameHost.exe',\n", + " 'AppLocker',\n", + " 'AppLockerCSP.dll',\n", + " 'ApplySettingsTemplateCatalog.exe',\n", + " 'ApplyTrustOffline.exe',\n", + " 'AppManagementConfiguration.dll',\n", + " 'appmgmts.dll',\n", + " 'appmgr.dll',\n", + " 'AppMon.dll',\n", + " 'AppointmentActivation.dll',\n", + " 'AppointmentApis.dll',\n", + " 'appraiser',\n", + " 'appraiser.dll',\n", + " 'AppReadiness.dll',\n", + " 'apprepapi.dll',\n", + " 'AppResolver.dll',\n", + " 'ApproveChildRequest.exe',\n", + " 'appsruprov.dll',\n", + " 'AppV',\n", + " 'AppVCatalog.dll',\n", + " 'AppVClient.exe',\n", + " 'AppvClientEventLog.dll',\n", + " 'AppVClientPS.dll',\n", + " 'AppVDllSurrogate.exe',\n", + " 'AppVEntStreamingManager.dll',\n", + " 'AppVEntSubsystemController.dll',\n", + " 'AppVEntSubsystems64.dll',\n", + " 'AppVEntVirtualization.dll',\n", + " 'appverif.chm',\n", + " 'appverif.exe',\n", + " 'appverifUI.dll',\n", + " 'appvetwclientres.dll',\n", + " 'appvetwsharedperformance.dll',\n", + " 'appvetwstreamingux.dll',\n", + " 'AppVFileSystemMetadata.dll',\n", + " 'AppVIntegration.dll',\n", + " 'AppVManifest.dll',\n", + " 'AppVNice.exe',\n", + " 'AppVOrchestration.dll',\n", + " 'AppVPolicy.dll',\n", + " 'AppVPublishing.dll',\n", + " 'AppVReporting.dll',\n", + " 'AppVScripting.dll',\n", + " 'AppVSentinel.dll',\n", + " 'AppVShNotify.exe',\n", + " 'AppVStreamingUX.dll',\n", + " 'AppVStreamMap.dll',\n", + " 'AppVTerminator.dll',\n", + " 'appwiz.cpl',\n", + " 'AppxAllUserStore.dll',\n", + " 'AppXApplicabilityBlob.dll',\n", + " 'AppxApplicabilityEngine.dll',\n", + " 'AppXDeploymentClient.dll',\n", + " 'AppXDeploymentExtensions.desktop.dll',\n", + " 'AppXDeploymentExtensions.onecore.dll',\n", + " 'AppXDeploymentServer.dll',\n", + " 'AppxPackaging.dll',\n", + " 'AppxProvisioning.xml',\n", + " 'AppxSip.dll',\n", + " 'AppxStreamingDataSourcePS.dll',\n", + " 'AppxSysprep.dll',\n", + " 'ar-SA',\n", + " 'archiveint.dll',\n", + " 'ARP.EXE',\n", + " 'as-IN',\n", + " 'asferror.dll',\n", + " 'aspnet_counters.dll',\n", + " 'AssignedAccessCsp.dll',\n", + " 'AssignedAccessManager.dll',\n", + " 'assignedaccessmanagersvc.dll',\n", + " 'AssignedAccessShellProxy.dll',\n", + " 'asycfilt.dll',\n", + " 'at.exe',\n", + " 'AtBroker.exe',\n", + " 'atl.dll',\n", + " 'atl100.dll',\n", + " 'atl110.dll',\n", + " 'atlthunk.dll',\n", + " 'atmfd.dll',\n", + " 'atmlib.dll',\n", + " 'AttestationWmiProvider.dll',\n", + " 'attrib.exe',\n", + " 'audiodg.exe',\n", + " 'AudioEndpointBuilder.dll',\n", + " 'AudioEng.dll',\n", + " 'AudioHandlers.dll',\n", + " 'AUDIOKSE.dll',\n", + " 'audioresourceregistrar.dll',\n", + " 'AudioSes.dll',\n", + " 'audiosrv.dll',\n", + " 'AudioSrvPolicyManager.dll',\n", + " 'auditcse.dll',\n", + " 'AuditNativeSnapIn.dll',\n", + " 'auditpol.exe',\n", + " 'auditpolcore.dll',\n", + " 'AuditPolicyGPInterop.dll',\n", + " 'auditpolmsg.dll',\n", + " 'AuthBroker.dll',\n", + " 'AuthBrokerUI.dll',\n", + " 'AuthExt.dll',\n", + " 'authfwcfg.dll',\n", + " 'AuthFWGP.dll',\n", + " 'AuthFWSnapin.dll',\n", + " 'AuthFWWizFwk.dll',\n", + " 'AuthHost.exe',\n", + " 'AuthHostProxy.dll',\n", + " 'authui.dll',\n", + " 'authz.dll',\n", + " 'autochk.exe',\n", + " 'autoconv.exe',\n", + " 'autofmt.exe',\n", + " 'autopilot.dll',\n", + " 'autoplay.dll',\n", + " 'AverageRoom.bin',\n", + " 'avicap32.dll',\n", + " 'avifil32.dll',\n", + " 'avrt.dll',\n", + " 'AxInstSv.dll',\n", + " 'AxInstUI.exe',\n", + " 'az-Latn-AZ',\n", + " 'azman.msc',\n", + " 'azroles.dll',\n", + " 'azroleui.dll',\n", + " 'AzSqlExt.dll',\n", + " 'AzureSettingSyncProvider.dll',\n", + " 'baaupdate.exe',\n", + " 'BackgroundMediaPolicy.dll',\n", + " 'backgroundTaskHost.exe',\n", + " 'BackgroundTransferHost.exe',\n", + " 'BamSettingsClient.dll',\n", + " 'BarcodeProvisioningPlugin.dll',\n", + " 'basecsp.dll',\n", + " 'basesrv.dll',\n", + " 'batmeter.dll',\n", + " 'bcastdvr.proxy.dll',\n", + " 'BcastDVRBroker.dll',\n", + " 'BcastDVRClient.dll',\n", + " 'BcastDVRCommon.dll',\n", + " 'bcastdvruserservice.dll',\n", + " 'bcd.dll',\n", + " 'bcdboot.exe',\n", + " 'bcdedit.exe',\n", + " 'bcdprov.dll',\n", + " 'bcdsrv.dll',\n", + " 'BCP47Langs.dll',\n", + " 'BCP47mrm.dll',\n", + " 'bcrypt.dll',\n", + " 'bcryptprimitives.dll',\n", + " 'bdaplgin.ax',\n", + " 'bdechangepin.exe',\n", + " 'BdeHdCfg.exe',\n", + " 'BdeHdCfgLib.dll',\n", + " 'bderepair.dll',\n", + " 'bdesvc.dll',\n", + " 'BdeSysprep.dll',\n", + " 'bdeui.dll',\n", + " 'BdeUISrv.exe',\n", + " 'bdeunlock.exe',\n", + " 'be-BY',\n", + " 'BestPractices',\n", + " 'BFE.DLL',\n", + " 'bg-BG',\n", + " 'bi.dll',\n", + " 'bidispl.dll',\n", + " 'BingASDS.dll',\n", + " 'BingFilterDS.dll',\n", + " 'BingMaps.dll',\n", + " 'BingOnlineServices.dll',\n", + " 'BioCredProv.dll',\n", + " 'BioIso.exe',\n", + " 'bisrv.dll',\n", + " 'BitLockerCsp.dll',\n", + " 'BitLockerDeviceEncryption.exe',\n", + " 'BitLockerWizard.exe',\n", + " 'BitLockerWizardElev.exe',\n", + " 'bitsadmin.exe',\n", + " 'bitsigd.dll',\n", + " 'bitsperf.dll',\n", + " 'BitsProxy.dll',\n", + " 'biwinrt.dll',\n", + " 'BlbEvents.dll',\n", + " 'blbres.dll',\n", + " 'blb_ps.dll',\n", + " 'BluetoothApis.dll',\n", + " 'BluetoothDesktopHandlers.dll',\n", + " 'BluetoothPairingSystemToastIcon.contrast-black.png',\n", + " 'BluetoothPairingSystemToastIcon.contrast-high.png',\n", + " 'BluetoothPairingSystemToastIcon.contrast-white.png',\n", + " 'BluetoothPairingSystemToastIcon.png',\n", + " 'BluetoothSystemToastIcon.contrast-white.png',\n", + " 'BluetoothSystemToastIcon.png',\n", + " 'bn-BD',\n", + " 'bn-IN',\n", + " 'bnmanager.dll',\n", + " 'Boot',\n", + " 'boot.sdi',\n", + " 'bootcfg.exe',\n", + " 'bootim.exe',\n", + " 'BootMenuUX.dll',\n", + " 'bootsect.exe',\n", + " 'bootstr.dll',\n", + " 'bootux.dll',\n", + " 'BOOTVID.DLL',\n", + " 'bopomofo.uce',\n", + " 'BRADM10A.DAT',\n", + " 'bridgeres.dll',\n", + " 'bridgeunattend.exe',\n", + " 'BrMf4Wia.dll',\n", + " 'BrMfJDec.dll',\n", + " 'BrokerLib.dll',\n", + " 'browcli.dll',\n", + " 'browser.dll',\n", + " 'browserbroker.dll',\n", + " 'browserexport.exe',\n", + " 'BrowserSettingSync.dll',\n", + " 'browser_broker.exe',\n", + " 'browseui.dll',\n", + " 'BrUs3Sti.dll',\n", + " 'bs-Latn-BA',\n", + " 'BTAGService.dll',\n", + " 'BTAudioGatewayClient.dll',\n", + " 'BthAvctpSvc.dll',\n", + " 'BthAvrcp.dll',\n", + " 'BthAvrcpAppSvc.dll',\n", + " 'bthci.dll',\n", + " 'BthMtpContextHandler.dll',\n", + " 'bthpanapi.dll',\n", + " 'BthpanContextHandler.dll',\n", + " 'Bthprops',\n", + " 'bthprops.cpl',\n", + " 'BthRadioMedia.dll',\n", + " 'bthserv.dll',\n", + " 'BthTelemetry.dll',\n", + " 'bthudtask.exe',\n", + " 'btpanui.dll',\n", + " 'Bubbles.scr',\n", + " 'BWContextHandler.dll',\n", + " 'ByteCodeGenerator.exe',\n", + " 'ca-ES',\n", + " 'ca-ES-valencia',\n", + " 'cabapi.dll',\n", + " 'cabinet.dll',\n", + " 'cabview.dll',\n", + " 'cacls.exe',\n", + " 'calc.exe',\n", + " 'CallButtons.dll',\n", + " 'CallButtons.ProxyStub.dll',\n", + " 'CallHistoryClient.dll',\n", + " 'CameraCaptureUI.dll',\n", + " 'CameraSettingsUIHost.exe',\n", + " 'canonurl.dll',\n", + " 'CapabilityAccessHandlers.dll',\n", + " 'CapabilityAccessManager.dll',\n", + " 'CapabilityAccessManagerClient.dll',\n", + " 'capauthz.dll',\n", + " 'capiprovider.dll',\n", + " 'capisp.dll',\n", + " 'CaptureService.dll',\n", + " 'CastingShellExt.dll',\n", + " 'CastLaunch.dll',\n", + " 'CastSrv.exe',\n", + " 'CatRoot',\n", + " 'catroot2',\n", + " 'catsrv.dll',\n", + " 'catsrvps.dll',\n", + " 'catsrvut.dll',\n", + " 'cca.dll',\n", + " 'CCG.exe',\n", + " 'CCGLaunchPad.dll',\n", + " 'cdd.dll',\n", + " 'cdosys.dll',\n", + " 'cdp.dll',\n", + " 'cdprt.dll',\n", + " 'cdpsvc.dll',\n", + " 'cdpusersvc.dll',\n", + " 'CellularAPI.dll',\n", + " 'cellulardatacapabilityhandler.dll',\n", + " 'cemapi.dll',\n", + " 'cero.rs',\n", + " 'certca.dll',\n", + " 'certcli.dll',\n", + " 'certCredProvider.dll',\n", + " 'certenc.dll',\n", + " 'CertEnroll.dll',\n", + " 'CertEnrollCtrl.exe',\n", + " 'CertEnrollUI.dll',\n", + " 'certlm.msc',\n", + " 'certmgr.dll',\n", + " 'certmgr.msc',\n", + " 'CertPKICmdlet.dll',\n", + " 'CertPolEng.dll',\n", + " 'certprop.dll',\n", + " 'certreq.exe',\n", + " 'certutil.exe',\n", + " 'cewmdm.dll',\n", + " 'cfgbkend.dll',\n", + " 'cfgmgr32.dll',\n", + " 'CfgSPCellular.dll',\n", + " 'CfgSPPolicy.dll',\n", + " 'cflapi.dll',\n", + " 'cfmifs.dll',\n", + " 'cfmifsproxy.dll',\n", + " 'Chakra.dll',\n", + " 'Chakradiag.dll',\n", + " 'Chakrathunk.dll',\n", + " 'change.exe',\n", + " 'changepk.exe',\n", + " 'charmap.exe',\n", + " 'chartv.dll',\n", + " 'ChatApis.dll',\n", + " 'chcp.com',\n", + " 'CheckNetIsolation.exe',\n", + " 'chglogon.exe',\n", + " 'chgport.exe',\n", + " 'chgusr.exe',\n", + " 'chkdsk.exe',\n", + " 'chkntfs.exe',\n", + " 'chkwudrv.dll',\n", + " 'choice.exe',\n", + " 'chr-CHER-US',\n", + " 'ChsStrokeDS.dll',\n", + " 'chs_singlechar_pinyin.dat',\n", + " 'ChtBopomofoDS.dll',\n", + " 'ChtCangjieDS.dll',\n", + " 'ChtHkStrokeDS.dll',\n", + " 'ChtQuickDS.dll',\n", + " 'ChxAPDS.dll',\n", + " 'ChxDecoder.dll',\n", + " 'ChxHAPDS.dll',\n", + " 'chxinputrouter.dll',\n", + " 'chxranker.dll',\n", + " 'CHxReadingStringIME.dll',\n", + " 'ci.dll',\n", + " 'cic.dll',\n", + " 'CIDiag.exe',\n", + " 'cipher.exe',\n", + " 'CIRCoInst.dll',\n", + " 'CIWmi.dll',\n", + " 'clb.dll',\n", + " 'clbcatq.dll',\n", + " 'cldapi.dll',\n", + " 'cleanmgr.exe',\n", + " 'CleanPCCSP.dll',\n", + " 'clfsw32.dll',\n", + " 'cliconfg.dll',\n", + " 'cliconfg.exe',\n", + " 'cliconfg.rll',\n", + " 'clip.exe',\n", + " 'ClipboardServer.dll',\n", + " 'Clipc.dll',\n", + " 'ClipRenew.exe',\n", + " 'ClipSVC.dll',\n", + " 'ClipUp.exe',\n", + " 'cloudAP.dll',\n", + " 'CloudBackupSettings.dll',\n", + " 'CloudDomainJoinAUG.dll',\n", + " 'CloudDomainJoinDataModelServer.dll',\n", + " 'CloudExperienceHost.dll',\n", + " 'CloudExperienceHostBroker.dll',\n", + " 'CloudExperienceHostBroker.exe',\n", + " 'CloudExperienceHostCommon.dll',\n", + " 'CloudExperienceHostUser.dll',\n", + " 'CloudNotifications.exe',\n", + " 'CloudStorageWizard.exe',\n", + " 'clrhost.dll',\n", + " 'clusapi.dll',\n", + " 'cmcfg32.dll',\n", + " 'cmd.exe',\n", + " 'cmdext.dll',\n", + " 'cmdial32.dll',\n", + " 'cmdkey.exe',\n", + " 'cmdl32.exe',\n", + " 'cmgrcspps.dll',\n", + " 'cmifw.dll',\n", + " 'cmintegrator.dll',\n", + " 'cmlua.dll',\n", + " 'cmmon32.exe',\n", + " 'cmpbk32.dll',\n", + " 'cmstp.exe',\n", + " 'cmstplua.dll',\n", + " 'cmutil.dll',\n", + " 'cngcredui.dll',\n", + " 'cngprovider.dll',\n", + " 'cnvfat.dll',\n", + " 'cob-au.rs',\n", + " 'CodeIntegrity',\n", + " 'cofire.exe',\n", + " 'cofiredm.dll',\n", + " 'colbact.dll',\n", + " 'coloradapterclient.dll',\n", + " 'COLORCNV.DLL',\n", + " 'colorcpl.exe',\n", + " 'colorui.dll',\n", + " 'com',\n", + " 'combase.dll',\n", + " 'comcat.dll',\n", + " 'comctl32.dll',\n", + " 'comdlg32.dll',\n", + " 'comexp.msc',\n", + " 'coml2.dll',\n", + " 'comp.exe',\n", + " 'compact.exe',\n", + " 'CompatTelRunner.exe',\n", + " 'compmgmt.msc',\n", + " 'CompMgmtLauncher.exe',\n", + " 'ComposableShellProxyStub.dll',\n", + " 'ComposerFramework.dll',\n", + " 'CompPkgSup.dll',\n", + " 'compstui.dll',\n", + " 'ComputerDefaults.exe',\n", + " 'ComputerToastIcon.contrast-white.png',\n", + " 'ComputerToastIcon.png',\n", + " 'comrepl.dll',\n", + " 'comres.dll',\n", + " 'comsnap.dll',\n", + " 'comsvcs.dll',\n", + " 'comuid.dll',\n", + " 'concrt140.dll',\n", + " 'concrt140d.dll',\n", + " 'config',\n", + " 'configmanager2.dll',\n", + " 'Configuration',\n", + " 'ConfigureExpandedStorage.dll',\n", + " 'conhost.exe',\n", + " 'ConhostV1.dll',\n", + " 'connect.dll',\n", + " 'ConnectedAccountState.dll',\n", + " 'consent.exe',\n", + " 'ConsentUX.dll',\n", + " 'console.dll',\n", + " 'ConsoleLogon.dll',\n", + " 'ConstraintIndex.Search.dll',\n", + " 'ContactActivation.dll',\n", + " 'ContactApis.dll',\n", + " 'ContactHarvesterDS.dll',\n", + " 'container.dll',\n", + " 'containers',\n", + " 'ContentDeliveryManager.Utilities.dll',\n", + " 'control.exe',\n", + " 'convert.exe',\n", + " 'convertvhd.exe',\n", + " 'coreaudiopolicymanagerext.dll',\n", + " 'coredpus.dll',\n", + " 'coredpussvr.exe',\n", + " 'CoreMessaging.dll',\n", + " 'CoreMmRes.dll',\n", + " 'CoreShell.dll',\n", + " 'CoreShellAPI.dll',\n", + " 'CoreShellExtFramework.dll',\n", + " 'CoreUIComponents.dll',\n", + " 'correngine.dll',\n", + " 'Cortana.Persona.dll',\n", + " 'CortanaMapiHelper.dll',\n", + " 'CortanaMapiHelper.ProxyStub.dll',\n", + " 'CourtesyEngine.dll',\n", + " 'CPFilters.dll',\n", + " 'CredDialogBroker.dll',\n", + " 'CredentialMigrationHandler.dll',\n", + " 'CredentialUIBroker.exe',\n", + " 'CredProv2faHelper.dll',\n", + " 'CredProvDataModel.dll',\n", + " 'CredProvHelper.dll',\n", + " 'credprovhost.dll',\n", + " 'credprovs.dll',\n", + " 'credprovslegacy.dll',\n", + " 'credssp.dll',\n", + " 'credui.dll',\n", + " 'credwiz.exe',\n", + " 'crypt32.dll',\n", + " 'cryptbase.dll',\n", + " 'cryptcatsvc.dll',\n", + " 'cryptdlg.dll',\n", + " 'cryptdll.dll',\n", + " 'cryptext.dll',\n", + " 'cryptnet.dll',\n", + " 'cryptngc.dll',\n", + " 'CryptoWinRT.dll',\n", + " 'cryptsp.dll',\n", + " 'cryptsvc.dll',\n", + " 'crypttpmeksvc.dll',\n", + " 'cryptui.dll',\n", + " 'cryptuiwizard.dll',\n", + " 'cryptxml.dll',\n", + " 'cs-CZ',\n", + " 'cscapi.dll',\n", + " 'cscdll.dll',\n", + " 'CscMig.dll',\n", + " 'cscobj.dll',\n", + " 'cscript.exe',\n", + " 'cscsvc.dll',\n", + " 'cscui.dll',\n", + " 'CspCellularSettings.dll',\n", + " 'csplte.dll',\n", + " 'CspProxy.dll',\n", + " 'csrr.rs',\n", + " 'csrsrv.dll',\n", + " 'csrss.exe',\n", + " 'CSystemEventsBrokerClient.dll',\n", + " 'ctfmon.exe',\n", + " 'cttune.exe',\n", + " 'cttunesvr.exe',\n", + " 'curl.exe',\n", + " 'cuzzapi.dll',\n", + " 'CXHProvisioningServer.dll',\n", + " 'cy-GB',\n", + " 'C_037.NLS',\n", + " 'C_10000.NLS',\n", + " 'C_10001.NLS',\n", + " 'C_10002.NLS',\n", + " 'C_10003.NLS',\n", + " 'C_10004.NLS',\n", + " 'C_10005.NLS',\n", + " 'C_10006.NLS',\n", + " 'C_10007.NLS',\n", + " 'C_10008.NLS',\n", + " 'C_10010.NLS',\n", + " 'C_10017.NLS',\n", + " 'C_10021.NLS',\n", + " 'C_10029.NLS',\n", + " 'C_10079.NLS',\n", + " 'C_10081.NLS',\n", + " 'C_10082.NLS',\n", + " 'C_1026.NLS',\n", + " 'C_1047.NLS',\n", + " 'C_1140.NLS',\n", + " 'C_1141.NLS',\n", + " 'C_1142.NLS',\n", + " 'C_1143.NLS',\n", + " 'C_1144.NLS',\n", + " 'C_1145.NLS',\n", + " 'C_1146.NLS',\n", + " 'C_1147.NLS',\n", + " 'C_1148.NLS',\n", + " 'C_1149.NLS',\n", + " 'C_1250.NLS',\n", + " 'C_1251.NLS',\n", + " 'C_1252.NLS',\n", + " 'C_1253.NLS',\n", + " 'C_1254.NLS',\n", + " 'C_1255.NLS',\n", + " 'C_1256.NLS',\n", + " 'C_1257.NLS',\n", + " 'C_1258.NLS',\n", + " 'C_1361.NLS',\n", + " 'C_20000.NLS',\n", + " 'C_20001.NLS',\n", + " 'C_20002.NLS',\n", + " 'C_20003.NLS',\n", + " 'C_20004.NLS',\n", + " 'C_20005.NLS',\n", + " 'C_20105.NLS',\n", + " 'C_20106.NLS',\n", + " 'C_20107.NLS',\n", + " 'C_20108.NLS',\n", + " 'C_20127.NLS',\n", + " 'C_20261.NLS',\n", + " 'C_20269.NLS',\n", + " 'C_20273.NLS',\n", + " 'C_20277.NLS',\n", + " 'C_20278.NLS',\n", + " 'C_20280.NLS',\n", + " 'C_20284.NLS',\n", + " 'C_20285.NLS',\n", + " 'C_20290.NLS',\n", + " 'C_20297.NLS',\n", + " 'C_20420.NLS',\n", + " 'C_20423.NLS',\n", + " 'C_20424.NLS',\n", + " 'C_20833.NLS',\n", + " 'C_20838.NLS',\n", + " 'C_20866.NLS',\n", + " 'C_20871.NLS',\n", + " 'C_20880.NLS',\n", + " 'C_20905.NLS',\n", + " 'C_20924.NLS',\n", + " 'C_20932.NLS',\n", + " 'C_20936.NLS',\n", + " 'C_20949.NLS',\n", + " 'C_21025.NLS',\n", + " 'C_21027.NLS',\n", + " 'C_21866.NLS',\n", + " 'C_28591.NLS',\n", + " 'C_28592.NLS',\n", + " 'C_28593.NLS',\n", + " 'C_28594.NLS',\n", + " 'C_28595.NLS',\n", + " 'C_28596.NLS',\n", + " 'C_28597.NLS',\n", + " 'C_28598.NLS',\n", + " 'C_28599.NLS',\n", + " 'c_28603.nls',\n", + " 'C_28605.NLS',\n", + " 'C_437.NLS',\n", + " 'C_500.NLS',\n", + " 'C_65001.NLS',\n", + " 'C_708.NLS',\n", + " 'C_720.NLS',\n", + " 'C_737.NLS',\n", + " 'C_775.NLS',\n", + " 'C_850.NLS',\n", + " 'C_852.NLS',\n", + " 'C_855.NLS',\n", + " 'C_857.NLS',\n", + " 'C_858.NLS',\n", + " 'C_860.NLS',\n", + " 'C_861.NLS',\n", + " 'C_862.NLS',\n", + " 'C_863.NLS',\n", + " 'C_864.NLS',\n", + " 'C_865.NLS',\n", + " 'C_866.NLS',\n", + " 'C_869.NLS',\n", + " 'C_870.NLS',\n", + " 'C_874.NLS',\n", + " 'C_875.NLS',\n", + " 'C_932.NLS',\n", + " 'C_936.NLS',\n", + " 'C_949.NLS',\n", + " 'C_950.NLS',\n", + " 'C_G18030.DLL',\n", + " 'c_GSM7.DLL',\n", + " 'C_IS2022.DLL',\n", + " 'C_ISCII.DLL',\n", + " 'd2d1.dll',\n", + " 'D2D1Debug2.dll',\n", + " 'd2d1debug3.dll',\n", + " 'd3d10.dll',\n", + " 'd3d10core.dll',\n", + " 'd3d10level9.dll',\n", + " 'd3d10ref.dll',\n", + " 'd3d10sdklayers.dll',\n", + " 'd3d10warp.dll',\n", + " 'd3d10_1.dll',\n", + " 'd3d10_1core.dll',\n", + " 'd3d11.dll',\n", + " 'd3d11ref.dll',\n", + " 'd3d11sdklayers.dll',\n", + " 'd3d11_1sdklayers.dll',\n", + " 'd3d11_2sdklayers.dll',\n", + " 'd3d11_3SDKLayers.dll',\n", + " 'D3D12.dll',\n", + " 'd3d12SDKLayers.dll',\n", + " 'd3d8thk.dll',\n", + " 'd3d9.dll',\n", + " 'd3d9on12.dll',\n", + " 'D3DCompiler_33.dll',\n", + " 'D3DCompiler_34.dll',\n", + " 'D3DCompiler_35.dll',\n", + " 'D3DCompiler_36.dll',\n", + " 'D3DCompiler_37.dll',\n", + " 'D3DCompiler_38.dll',\n", + " 'D3DCompiler_39.dll',\n", + " 'D3DCompiler_40.dll',\n", + " 'D3DCompiler_41.dll',\n", + " 'D3DCompiler_42.dll',\n", + " 'D3DCompiler_43.dll',\n", + " 'D3DCompiler_47.dll',\n", + " 'd3dcsx_42.dll',\n", + " 'd3dcsx_43.dll',\n", + " 'd3dref9.dll',\n", + " 'D3DSCache.dll',\n", + " 'd3dx10.dll',\n", + " 'd3dx10_33.dll',\n", + " 'd3dx10_34.dll',\n", + " 'd3dx10_35.dll',\n", + " 'd3dx10_36.dll',\n", + " 'd3dx10_37.dll',\n", + " 'd3dx10_38.dll',\n", + " 'd3dx10_39.dll',\n", + " 'd3dx10_40.dll',\n", + " 'd3dx10_41.dll',\n", + " 'd3dx10_42.dll',\n", + " 'd3dx10_43.dll',\n", + " 'd3dx11_42.dll',\n", + " 'd3dx11_43.dll',\n", + " 'd3dx9_24.dll',\n", + " 'd3dx9_25.dll',\n", + " 'd3dx9_26.dll',\n", + " 'd3dx9_27.dll',\n", + " 'd3dx9_28.dll',\n", + " 'd3dx9_29.dll',\n", + " 'd3dx9_30.dll',\n", + " 'd3dx9_31.dll',\n", + " 'd3dx9_32.dll',\n", + " 'd3dx9_33.dll',\n", + " 'd3dx9_34.dll',\n", + " 'd3dx9_35.dll',\n", + " 'd3dx9_36.dll',\n", + " 'D3DX9_37.dll',\n", + " 'D3DX9_38.dll',\n", + " 'D3DX9_39.dll',\n", + " 'D3DX9_40.dll',\n", + " 'D3DX9_41.dll',\n", + " 'D3DX9_42.dll',\n", + " 'D3DX9_43.dll',\n", + " 'da-DK',\n", + " 'dab.dll',\n", + " 'dabapi.dll',\n", + " 'DAConn.dll',\n", + " 'dafAspInfraProvider.dll',\n", + " 'dafBth.dll',\n", + " 'DafDnsSd.dll',\n", + " 'dafDockingProvider.dll',\n", + " 'DafGip.dll',\n", + " 'DAFIoT.dll',\n", + " 'DAFIPP.dll',\n", + " 'dafpos.dll',\n", + " 'DafPrintProvider.dll',\n", + " 'dafupnp.dll',\n", + " 'dafWCN.dll',\n", + " 'dafWfdProvider.dll',\n", + " 'DAFWiProv.dll',\n", + " 'DAFWSD.dll',\n", + " 'DAMediaManager.dll',\n", + " 'DAMM.dll',\n", + " 'DaOtpCredentialProvider.dll',\n", + " 'das.dll',\n", + " 'dasHost.exe',\n", + " 'dataclen.dll',\n", + " 'DataExchange.dll',\n", + " 'DataExchangeHost.exe',\n", + " 'datamarketsvc.dll',\n", + " 'DataStoreCacheDumpTool.exe',\n", + " 'DataUsageHandlers.dll',\n", + " 'DataUsageLiveTileTask.exe',\n", + " 'datusage.dll',\n", + " 'davclnt.dll',\n", + " 'davhlpr.dll',\n", + " 'DavSyncProvider.dll',\n", + " 'daxexec.dll',\n", + " 'dbgcore.dll',\n", + " 'dbgeng.dll',\n", + " 'dbghelp.dll',\n", + " 'DbgModel.dll',\n", + " 'dbnetlib.dll',\n", + " 'dbnmpntw.dll',\n", + " 'dccw.exe',\n", + " 'dciman32.dll',\n", + " 'dcntel.dll',\n", + " 'dcomcnfg.exe',\n", + " 'dcomp.dll',\n", + " 'DDACLSys.dll',\n", + " 'DdcAntiTheftApi.dll',\n", + " 'DdcComImplementationsDesktop.dll',\n", + " 'DDDS.dll',\n", + " 'DDFs',\n", + " 'ddisplay.dll',\n", + " 'ddodiag.exe',\n", + " 'DDOIProxy.dll',\n", + " 'DDORes.dll',\n", + " 'ddpchunk.dll',\n", + " 'ddptrace.dll',\n", + " 'ddputils.dll',\n", + " 'ddp_ps.dll',\n", + " 'ddraw.dll',\n", + " 'ddrawex.dll',\n", + " 'de-DE',\n", + " 'DefaultAccountTile.png',\n", + " 'DefaultDeviceManager.dll',\n", + " 'DefaultHrtfs.bin',\n", + " 'DefaultPrinterProvider.dll',\n", + " 'DefaultQuestions.json',\n", + " 'Defrag.exe',\n", + " 'defragproxy.dll',\n", + " 'defragres.dll',\n", + " 'defragsvc.dll',\n", + " 'delegatorprovider.dll',\n", + " 'desk.cpl',\n", + " 'deskadp.dll',\n", + " 'deskmon.dll',\n", + " 'desktopimgdownldr.exe',\n", + " 'DesktopKeepOnToastImg.gif',\n", + " 'DesktopShellAppStateContract.dll',\n", + " 'DesktopShellExt.dll',\n", + " 'DesktopSwitcherDataModel.dll',\n", + " 'DesktopView.Internal.Broker.dll',\n", + " 'DesktopView.Internal.Broker.ProxyStub.dll',\n", + " 'DetailedReading-Default.xml',\n", + " 'DevDispItemProvider.dll',\n", + " 'DeveloperOptionsSettingsHandlers.dll',\n", + " 'devenum.dll',\n", + " 'deviceaccess.dll',\n", + " 'deviceassociation.dll',\n", + " 'DeviceCensus.exe',\n", + " 'DeviceCenter.dll',\n", + " 'DeviceCredential.dll',\n", + " 'DeviceCredentialDeployment.exe',\n", + " 'DeviceDirectoryClient.dll',\n", + " 'DeviceDisplayStatusManager.dll',\n", + " 'DeviceDriverRetrievalClient.dll',\n", + " 'DeviceEject.exe',\n", + " 'DeviceElementSource.dll',\n", + " 'DeviceEnroller.exe',\n", + " 'DeviceFlows.DataModel.dll',\n", + " 'DeviceMetadataRetrievalClient.dll',\n", + " 'devicengccredprov.dll',\n", + " 'DevicePairing.dll',\n", + " 'DevicePairingExperienceMEM.dll',\n", + " 'DevicePairingFolder.dll',\n", + " 'DevicePairingProxy.dll',\n", + " 'DevicePairingWizard.exe',\n", + " 'DeviceProperties.exe',\n", + " 'DeviceReactivation.dll',\n", + " 'deviceregistration.dll',\n", + " 'DeviceSetupManager.dll',\n", + " 'DeviceSetupManagerAPI.dll',\n", + " 'DeviceSetupStatusProvider.dll',\n", + " 'DevicesFlowBroker.dll',\n", + " 'DeviceSoftwareInstallationClient.dll',\n", + " 'DeviceUpdateAgent.dll',\n", + " 'DeviceUxRes.dll',\n", + " 'devinv.dll',\n", + " 'devmgmt.msc',\n", + " 'devmgr.dll',\n", + " 'DevModeRunAsUserConfig.msc',\n", + " 'devobj.dll',\n", + " 'DevPropMgr.dll',\n", + " 'DevQueryBroker.dll',\n", + " 'devrtl.dll',\n", + " 'dfdts.dll',\n", + " 'DFDWiz.exe',\n", + " 'dfrgui.exe',\n", + " 'dfscli.dll',\n", + " 'dfshim.dll',\n", + " 'DfsShlEx.dll',\n", + " 'dggpext.dll',\n", + " 'dhcpcmonitor.dll',\n", + " 'dhcpcore.dll',\n", + " 'dhcpcore6.dll',\n", + " 'dhcpcsvc.dll',\n", + " 'dhcpcsvc6.dll',\n", + " 'dhcpsapi.dll',\n", + " 'DHolographicDisplay.dll',\n", + " 'DiagCpl.dll',\n", + " 'DiagnosticInvoker.dll',\n", + " 'DiagnosticLogCSP.dll',\n", + " 'diagperf.dll',\n", + " 'DiagSvc.dll',\n", + " 'DiagSvcs',\n", + " 'diagtrack.dll',\n", + " 'dialclient.dll',\n", + " 'dialer.exe',\n", + " 'dialserver.dll',\n", + " 'DictationManager.dll',\n", + " 'difxapi.dll',\n", + " 'dimsjob.dll',\n", + " 'dimsroam.dll',\n", + " 'dinput.dll',\n", + " 'dinput8.dll',\n", + " 'Direct2DDesktop.dll',\n", + " 'directmanipulation.dll',\n", + " 'DisableIPv6.dll',\n", + " 'discan.dll',\n", + " 'diskmgmt.msc',\n", + " 'diskpart.exe',\n", + " 'diskperf.exe',\n", + " 'diskraid.exe',\n", + " 'DiskSnapshot.conf',\n", + " 'DiskSnapshot.exe',\n", + " 'Dism',\n", + " 'Dism.exe',\n", + " 'DismApi.dll',\n", + " 'DispBroker.dll',\n", + " 'dispdiag.exe',\n", + " 'dispex.dll',\n", + " 'Display.dll',\n", + " 'DisplayManager.dll',\n", + " 'DisplaySwitch.exe',\n", + " 'DisplaySystemToastIcon.contrast-white.png',\n", + " 'DisplaySystemToastIcon.png',\n", + " 'djctq.rs',\n", + " 'djoin.exe',\n", + " 'dllhost.exe',\n", + " 'dllhst3g.exe',\n", + " 'dlnashext.dll',\n", + " 'DMAlertListener.ProxyStub.dll',\n", + " 'DmApiSetExtImplDesktop.dll',\n", + " 'DMAppsRes.dll',\n", + " 'dmcertinst.exe',\n", + " 'dmcfghost.exe',\n", + " ...]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.listdir('C:\\\\Windows\\\\System32')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "如果想知道这个目录下所有文件的总字节数,就可以同时使用os.path.getsize()和os.listdir()。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2375.9645986557007\n" + ] + } + ], + "source": [ + "totalSize = 0\n", + "for filename in os.listdir('C:\\\\Windows\\\\System32'):\n", + " totalSize = totalSize + os.path.getsize(os.path.join('C:\\\\Windows\\\\System32', filename))\n", + "print(totalSize/1024/1024)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** 课堂小练习:**\n", + "如果想打印出总的文件大小(用GB)表示,应该怎么做?\n", + "\n", + "注意,这不包含System32目录下的文件夹内容的大小。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.6 检查路径有效性\n", + "如果你提供的路径不存在,许多Python 函数就会崩溃并报错。os.path 模块提供了一些函数,用于检测给定的路径是否存在,以及它是文件还是文件夹。\n", + "* 如果path 参数所指的文件或文件夹存在,调用**os.path.exists(path)**将返回True,否则返回False。\n", + "* 如果path 参数存在,并且是一个文件,调用**os.path.isfile(path)**将返回True,否则返回False。\n", + "* 如果path 参数存在,并且是一个文件夹,调用**os.path.isdir(path)**将返回True,否则返回False。" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.exists('C:\\\\Windows')" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.exists('C:\\\\Windows123456')" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.isdir('C:\\\\Windows\\\\System32')" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.isfile('C:\\\\Windows\\\\System32')" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.isdir('C:\\\\Windows\\\\System32\\\\calc.exe')" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.isfile('C:\\\\Windows\\\\System32\\\\calc.exe')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2.文件读写过程\n", + "\n", + "\n", + "文件包括两种类型:
\n", + "* 纯文本文件:“文本文件”只包含基本文本字符,不包含字体、大小和颜色信息。带有.txt 扩展名的文本文件,以及带有.py 扩展名的Python 脚本文件,都是纯文本文件的例子。\n", + "\n", + "* 二进制文件:“二进制文件”是所有其他文件类型,诸如字处理文档、PDF、图像、电子表格和可执行程序。如果用Notepad 或TextEdit 打开一个二进制文件,它看起来就像乱码。二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。二进制文件和文本文件最主要的区别在于是否有统一的字符编码\n", + "\n", + "无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,打开后的操作不同。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "人生苦短,我用Python\n", + "b'\\xc8\\xcb\\xc9\\xfa\\xbf\\xe0\\xb6\\xcc\\xa3\\xac\\xce\\xd2\\xd3\\xc3Python'\n" + ] + } + ], + "source": [ + "# 由于前面操作切换了当前目录,本文件可能放在系统不同的目录结构里,所以这里最好能重启一下内核:点击kernel菜单下的Restart。\n", + "import os\n", + "textFile = open(\"Documents/example.txt\",\"rt\") #t表示文本文件方式\n", + "print(textFile.readline())\n", + "textFile.close()\n", + "binFile = open(\"Documents/example.txt\",\"rb\") #b表示二进制文件方式\n", + "print(binFile.readline())\n", + "binFile.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "在Python 中,读写文件有3 个步骤:
\n", + "(1) 调用open()函数,返回一个File 对象。
\n", + "(2) 调用File 对象的read()或write()方法。
\n", + "(3) 调用File 对象的close()方法,关闭该文件。
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.1 用open()函数打开文件\n", + "要用**open()**函数打开一个文件,就要向它传递一个字符串路径,表明希望打开的文件。这既可以是绝对路径,也可以是相对路径。open()函数返回一个File对象。\n", + "\n", + "
**<变量名> = open(<文件名>, <打开模式>)**
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "textFile = open(\"Documents/example.txt\",\"rt\") #t表示文本文件方式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "这些命令都将以读取纯文本文件的模式打开文件,或简称为“读模式”。当文件以读模式打开时,Python 只让你从文件中读取数据,你***不能***以任何方式写入或修改它。\n", + "\n", + "在Python 中打开文件时,读模式是默认的模式。但如果你不希望依赖于Python 的默认值,也可以明确指明该模式,向open()传入字符串'r',作为第二个参数。\n", + "\n", + "调用open()将返回一个File 对象。File 对象代表计算机中的一个文件,它只是Python 中另一种类型的值,就像你已熟悉的列表和字典。\n", + "\n", + "open()函数提供7种基本的打开模式:\n", + "\n", + "|打开模式|含义|\n", + "|-----|:-----|\n", + "|'r'|只读模式,如果文件不存在,返回异常FileNotFoundError,默认值|\n", + "|'w'|覆盖写模式,文件不存在则创建,存在则完全覆盖源文件|\n", + "|'x'|创建写模式,文件不存在则创建,存在则返回异常FileExistsError|\n", + "|'a'|追加写模式,文件不存在则创建,存在则在原文件最后追加内容|\n", + "|'b'|二进制文件模式|\n", + "|'t'|文本文件模式,默认值|\n", + "|'+'|与r/w/x/a一同使用,在原功能基础上增加同时读写功能|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.2 读取文件内容\n", + "既然有了一个File 对象,就可以开始从它读取内容。如果希望将整个文件的内容读取为一个**字符串值**,就使用File对象的read()方法。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "编号,姓名,部门,电子邮箱,电话号码,身份证号码\n", + "10932,张珊,管理,zhans@163.com,18612345678,520125197907167551\n", + "10933,李思,软件,lisi@163.com,18612345679,510110195512176250\n", + "10934,王武,财务,wangwu@example.com,18612345680,510102196510255826\n", + "10935,赵柳,财务,zhaoliu@163.com,18612345681,510115195810287715\n", + "10936,钱棋,人事,qianqi@example.com,18612345682,510103196707165650\n", + "10941,张明,管理,zhangming@example.com,18612345683,510105198112166015\n", + "10942,赵敏,人事,zhaomin@163.com,18612345684,510105198505225815\n", + "10945,王红,培训,wanghong@example.com,18612345685,510221196208516555\n", + "10946,李萧,培训,lixiao@example.com,18612345686,510221196601510810\n", + "10947,孙科,软件,sunke@163.com,18612345687,510105198507025519\n", + "10948,刘利,软件,liuli@example.com,18612345688,510227197510280527\n" + ] + } + ], + "source": [ + "empFile = open(\"Documents/employees.txt\")\n", + "empInfo = empFile.read()\n", + "empFile.close()\n", + "print(empInfo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "或者,可以使用**readlines()**方法,从该文件取得一个字符串的列表。列表中的每个字符串就是文本中的每一行。请注意每行后面的换行符:\\\\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "['编号,姓名,部门,电子邮箱,电话号码,身份证号码\\n', '10932,张珊,管理,zhans@163.com,18612345678,520125197907167551\\n', '10933,李思,软件,lisi@163.com,18612345679,510110195512176250\\n', '10934,王武,财务,wangwu@example.com,18612345680,510102196510255826\\n', '10935,赵柳,财务,zhaoliu@163.com,18612345681,510115195810287715\\n', '10936,钱棋,人事,qianqi@example.com,18612345682,510103196707165650\\n', '10941,张明,管理,zhangming@example.com,18612345683,510105198112166015\\n', '10942,赵敏,人事,zhaomin@163.com,18612345684,510105198505225815\\n', '10945,王红,培训,wanghong@example.com,18612345685,510221196208516555\\n', '10946,李萧,培训,lixiao@example.com,18612345686,510221196601510810\\n', '10947,孙科,软件,sunke@163.com,18612345687,510105198507025519\\n', '10948,刘利,软件,liuli@example.com,18612345688,510227197510280527']\n" + ] + } + ], + "source": [ + "empFile = open(\"Documents/employees.txt\")\n", + "empInfo = empFile.readlines()\n", + "empFile.close()\n", + "print(type(empInfo))\n", + "print(empInfo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** 课堂练习 **\n", + "\n", + "请统计employees.txt文件的中女员工的个数:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "首先定义一个函数,根据身份证号码判断是不是女员工(是女员工返回1,不是返回0):" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def isFemaleByIDCard(idCard):\n", + " if len(idCard) == 18:\n", + " return 1 if int(idCard[16]) % 2 == 0 else 0 #理解一下这句话 :)\n", + " elif len(idCard) == 15:\n", + " return 1 if int(idCard[13] % 2) == 0 else 0\n", + " else:\n", + " return 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第2步,将employees.txt文件的内容读入,并存储到empList中:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[['10932', '张珊', '管理', 'zhans@163.com', '18612345678', '520125197907167551'], ['10933', '李思', '软件', 'lisi@163.com', '18612345679', '510110195512176250'], ['10934', '王武', '财务', 'wangwu@example.com', '18612345680', '510102196510255826'], ['10935', '赵柳', '财务', 'zhaoliu@163.com', '18612345681', '510115195810287715'], ['10936', '钱棋', '人事', 'qianqi@example.com', '18612345682', '510103196707165650'], ['10941', '张明', '管理', 'zhangming@example.com', '18612345683', '510105198112166015'], ['10942', '赵敏', '人事', 'zhaomin@163.com', '18612345684', '510105198505225815'], ['10945', '王红', '培训', 'wanghong@example.com', '18612345685', '510221196208516555'], ['10946', '李萧', '培训', 'lixiao@example.com', '18612345686', '510221196601510810'], ['10947', '孙科', '软件', 'sunke@163.com', '18612345687', '510105198507025519'], ['10948', '刘利', '软件', 'liuli@example.com', '18612345688', '510227197510280527']]\n" + ] + } + ], + "source": [ + "empFile = open(\"Documents/employees.txt\")\n", + "empInfo = empFile.readlines()\n", + "empFile.close()\n", + "\n", + "empList = []\n", + "for i in range(1,len(empInfo)): #注意,这里是从1开始的,为什么?\n", + " empStr = empInfo[i]\n", + " empStr = empStr.strip('\\n') # 这里是做什么?\n", + " empList.append(empStr.split(',')) #这里又是在做什么?\n", + "print(empList)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第3步,调用isFemaleByIDCard函数进行统计:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "女员工的人数是: 2\n" + ] + } + ], + "source": [ + "femaleCount = 0\n", + "for emp in empList:\n", + " femaleCount += isFemaleByIDCard(emp[5])\n", + "\n", + "print(\"女员工的人数是:\", femaleCount)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "根据打开方式不同可以对文件进行相应的读写操作,Python提供4个常用的文件内容读取方法:\n", + "\n", + "|方法|含义|\n", + "|---|:---|\n", + "|<file>.readall()|读入整个文件内容,返回一个字符串或字节流|\n", + "|<file>.read(size=-1)|从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流|\n", + "|<file>.readline(size = -1)|从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串或字节流|\n", + "|<file>.readlines(hint=-1)|从文件中读入所有行,以每行为元素形成一个列表,如果给出参数,读入hint行|\n", + "\n", + "\n", + "文本文件的逐行打印:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "编号,姓名,部门,电子邮箱,电话号码,身份证号码\n", + "\n", + "10932,张珊,管理,zhans@163.com,18612345678,520125197907167551\n", + "\n", + "10933,李思,软件,lisi@163.com,18612345679,510110195512176250\n", + "\n", + "10934,王武,财务,wangwu@example.com,18612345680,510102196510255826\n", + "\n", + "10935,赵柳,财务,zhaoliu@163.com,18612345681,510115195810287715\n", + "\n", + "10936,钱棋,人事,qianqi@example.com,18612345682,510103196707165650\n", + "\n", + "10941,张明,管理,zhangming@example.com,18612345683,51010519811216015\n", + "\n", + "10942,赵敏,人事,zhaomin@163.com,18612345684,510105198505225815\n", + "\n", + "10945,王红,培训,wanghong@example.com,18612345685,510221196208516555\n", + "\n", + "10946,李萧,培训,lixiao@example.com,18612345686,510221196601510810\n", + "\n", + "10947,孙科,软件,sunke@163.com,18612345687,510105198507025519\n", + "\n", + "10948,刘利,软件,liuli@example.com,18612345688,510227197510280527\n" + ] + } + ], + "source": [ + "with open(\"Documents/employees.txt\",\"r\") as empFile:\n", + " for line in empFile:\n", + " print(line)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面的方法用到了with语句,使用with语句,可以不需要调用文件的close()方法,文件会在with语句结束后自动关闭。\n", + "\n", + "如果程序需要逐行处理文件内容,建议采用上述代码格式。特别是对于大型文件的读取,这样处理比较合理。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.3 写入文件\n", + "Python 允许你将内容写入文件,方式与print()函数将字符串“写”到屏幕上类似。但是,如果打开文件时用读模式,就不能写入文件。你需要以“写入纯文本模\n", + "式”或“添加纯文本模式”打开该文件,或简称为“写模式”和“添加模式”。写模式将覆写原有的文件,从头开始,就像你用一个新值覆写一个变量的值。\n", + "\n", + "将'**w**'作为第二个参数传递给open(),以写模式打开该文件。不同的是,添加模式将在已有文件的末尾添加文本。可以认为这类似向一个变量中的列表添加内容,而不是完全覆写该变量。\n", + "\n", + "将'**a**'作为第二个参数传递给open(),以添加模式打开该文件。\n", + "\n", + "如果传递给 open()的文件名不存在,写模式和添加模式都会创建一个新的空文件。在读取或写入文件后,调用close()方法,然后才能再次打开该文件。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**课堂练习**\n", + "\n", + "接着上面的例子,将女员工人数,男员工人数和身份证号码有误的员工写入到统计结果文件result.txt:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "类似的,定义一个函数,根据身份证号码判断是不是男员工(是女员工返回1,不是返回0):" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def isMaleByIDCard(idCard):\n", + " if len(idCard) == 18:\n", + " return 1 if int(idCard[16]) % 2 == 1 else 0 #理解一下这句话 :)\n", + " elif len(idCard) == 15:\n", + " return 1 if int(idCard[13] % 2) == 1 else 0\n", + " else:\n", + " return 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "再定义一个函数,判断传入的身份证号码是否有误(身份证号码应该是18位或者15位),如果号码格式正确,返回True;如果格式不正确,返回False:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def isCorrectIDCard(idCard):\n", + " if len(idCard) in (15, 18):\n", + " return True\n", + " else:\n", + " return False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***PS. 这个方法判断身份证号码的正确性是简单粗暴的,如果要实现更复杂的判断规则,也许你想了解一下正则表达式,这会是扩展的内容。***" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "总人数: 11\n", + "女员工人数: 2\n", + "男员工人数: 7\n", + "以下员工身份证号码有误:李思 张明 " + ] + } + ], + "source": [ + "femaleCount = 0\n", + "maleCount = 0\n", + "invalidIDCard = []\n", + "\n", + "empFile = open(\"Documents/employees.txt\")\n", + "empInfo = empFile.readlines()\n", + "empFile.close()\n", + "\n", + "empList = []\n", + "for i in range(1,len(empInfo)): \n", + " empStr = empInfo[i]\n", + " empStr = empStr.strip('\\n') \n", + " empList.append(empStr.split(',')) \n", + "\n", + "for emp in empList:\n", + " femaleCount += isFemaleByIDCard(emp[5])\n", + " maleCount += isMaleByIDCard(emp[5])\n", + " if isCorrectIDCard(emp[5]) == False:\n", + " invalidIDCard.append(emp[1])\n", + "\n", + "print(\"总人数:\", len(empList))\n", + "print(\"女员工人数:\", femaleCount)\n", + "print(\"男员工人数:\", maleCount)\n", + "if len(invalidIDCard)>0:\n", + " print(\"以下员工身份证号码有误:\", end=\"\")\n", + " for name in invalidIDCard:\n", + " print(name, end=\" \")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "将统计的内容写入到result.txt文件:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "resultFile = open(\"Documents/result.txt\",\"w\")\n", + "resultFile.write(\"总人数:{}\\n\".format(len(empList)))\n", + "resultFile.write(\"女员工人数:{}\\n\".format(femaleCount))\n", + "resultFile.write(\"男员工人数:{}\\n\".format(maleCount))\n", + "if len(invalidIDCard) > 0:\n", + " nameStr = \"\"\n", + " for name in invalidIDCard:\n", + " nameStr += \" \" + name\n", + "\n", + "resultFile.write(\"\\n\")\n", + "resultFile.write(\"有{}个员工身份证号码有误:{}\\n\".format(len(invalidIDCard),nameStr))\n", + "resultFile.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "想想你们有500个员工,这个统计效率是不是很高了?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python提供3个与文件内容写入有关的方法:\n", + "\n", + "|方法|含义|\n", + "|---|:---|\n", + "|<file>.write(s)|向文件写入一个字符串或字节流|\n", + "|<file>.writelines(lines)|将一个元素为字符串的列表写入文件|\n", + "|<file>.seek(offset)|改变当前文件操作指针的位置,offset的值:0:文件开头; 1: 当前位置; 2: 文件结尾|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面的统计内容,可以使用wirtelines()函数将身份证号码有误的员工姓名一次写入文件:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "with open(\"Documents/result.txt\",\"w\") as resultFile:\n", + " resultFile.write(\"总人数:{}\\n\".format(len(empList)))\n", + " resultFile.write(\"女员工人数:{}\\n\".format(femaleCount))\n", + " resultFile.write(\"男员工人数:{}\\n\".format(maleCount))\n", + " if len(invalidIDCard) > 0:\n", + " resultFile.write(\"\\n\")\n", + " resultFile.write(\"有{}个员工身份证号码有误:\\n\".format(len(invalidIDCard)))\n", + " \n", + " resultFile.writelines(invalidIDCard)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "看看下面的结果,好像有点问题:\n", + "\n", + "\n", + "\n", + "解决这个问题的方法会有很多,其中比较方便的一种是列表推导式(非常Python的一种写法,也许你想了解以下):" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "with open(\"Documents/result.txt\",\"w\") as resultFile:\n", + " resultFile.write(\"总人数:{}\\n\".format(len(empList)))\n", + " resultFile.write(\"女员工人数:{}\\n\".format(femaleCount))\n", + " resultFile.write(\"男员工人数:{}\\n\".format(maleCount))\n", + " if len(invalidIDCard) > 0:\n", + " resultFile.write(\"\\n\")\n", + " resultFile.write(\"有{}个员工身份证号码有误:\\n\".format(len(invalidIDCard)))\n", + " \n", + " resultFile.writelines([item + \" \" for item in invalidIDCard])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3.处理CSV文件\n", + "\n", + "CSV 表示“Comma-Separated Values(逗号分隔的值)”,CSV文件是简化的电子表格,保存为纯文本文件。它是一种通用的、相对简单的文件格式,在商业和科学上广泛应用,尤其应用在程序之间转移表格数据。\n", + "\n", + "上面处理的员工信息格式其实就是一种CSV文件的格式。该格式的应用有一些基本规则,如下:\n", + "\n", + "(1)纯文本格式,通过单一编码表示字符;
\n", + "(2)以行为单位,开头不留空行,行之间没有空行;
\n", + "(3)每行表示一个一维数据,多行表示二维数据;
\n", + "(4)以逗号分隔每列数据,列数据为空也要保留逗号;
\n", + "(5)可以包含或不包含列名,包含时列名放置在文件第一行。
\n", + "\n", + "\n", + "Python 的csv模块让解析CSV文件变得容易。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.1 csv 模块\n", + "CSV 文件中的每行代表电子表格中的一行,逗号分割了该行中的单元格。在一个CSV 文件中,看起来像这样:\n", + "\n", + "\n", + "\n", + "CSV 文件是简单的,缺少Excel 电子表格的许多功能。例如,CSV 文件中:\n", + "* 值没有类型,所有东西都是字符串;\n", + "* 没有字体大小或颜色的设置;\n", + "* 没有多个工作表;\n", + "* 不能指定单元格的宽度和高度;\n", + "* 不能合并单元格;\n", + "* 不能嵌入图像或图表。\n", + "\n", + "CSV 的文件的优势是简单。\n", + "\n", + "csv模块是Python 自带的,所以不需要安装就可以导入它。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.2 Reader 对象\n", + "要用csv模块从CSV 文件中读取数据,需要创建一个Reader 对象。Reader 对象让你迭代遍历CSV 文件中的每一行。" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[['编号', '姓名', '基本工资', '奖金', '住房补助', '五险一金', '其他扣款', '专项附加扣除'],\n", + " ['10932',\n", + " '张珊',\n", + " '15000.00 ',\n", + " '4000.00 ',\n", + " '2300.00 ',\n", + " '980.00 ',\n", + " '300.00 ',\n", + " '1000.00'],\n", + " ['10933',\n", + " '李思',\n", + " '12000.00 ',\n", + " '5000.00 ',\n", + " '2600.00 ',\n", + " '890.00 ',\n", + " '400.00 ',\n", + " '2000.00'],\n", + " ['10934',\n", + " '王武',\n", + " '10100.00 ',\n", + " '2000.00 ',\n", + " '2500.00 ',\n", + " '860.00 ',\n", + " '500.00 ',\n", + " '1500.00'],\n", + " ['10935',\n", + " '赵柳',\n", + " '10050.00 ',\n", + " '1000.00 ',\n", + " '2700.00 ',\n", + " '1080.00 ',\n", + " '300.00 ',\n", + " '2000.00'],\n", + " ['10936',\n", + " '钱棋',\n", + " '10200.00 ',\n", + " '2000.00 ',\n", + " '2400.00 ',\n", + " '1000.00 ',\n", + " '600.00 ',\n", + " '1000.00'],\n", + " ['10941',\n", + " '张明',\n", + " '13600.00 ',\n", + " '4000.00 ',\n", + " '2100.00 ',\n", + " '680.00 ',\n", + " '300.00 ',\n", + " '1000.00'],\n", + " ['10942',\n", + " '赵敏',\n", + " '13200.00 ',\n", + " '2500.00 ',\n", + " '2300.00 ',\n", + " '670.00 ',\n", + " '400.00 ',\n", + " '3000.00'],\n", + " ['10945',\n", + " '王红',\n", + " '13600.00 ',\n", + " '2600.00 ',\n", + " '2030.00 ',\n", + " '560.00 ',\n", + " '400.00 ',\n", + " '2000.00'],\n", + " ['10946',\n", + " '李萧',\n", + " '12500.00 ',\n", + " '2800.00 ',\n", + " '2400.00 ',\n", + " '420.00 ',\n", + " '500.00 ',\n", + " '1500.00'],\n", + " ['10947',\n", + " '孙科',\n", + " '12000.00 ',\n", + " '3500.00 ',\n", + " '2030.00 ',\n", + " '880.00 ',\n", + " '300.00 ',\n", + " '1000.00'],\n", + " ['10948',\n", + " '刘利',\n", + " '14200.00 ',\n", + " '2500.00 ',\n", + " '2020.00 ',\n", + " '900.00 ',\n", + " '400.00 ',\n", + " '2000.00']]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import csv\n", + "\n", + "incomeFile = open('Documents/income.csv')\n", + "incomeReader = csv.reader(incomeFile)\n", + "incomeList = list(incomeReader)\n", + "incomeList" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "回头和前面对于员工信息处理的方法比较一下,是不是更简单了?\n", + "\n", + "既然已经将CSV文件表示为列表的列表,就可以用表达式**incomeList[row][col]**来访问特定行和列的值。其中,row是incomeList中一个列表的下标,col是该列表中你想访问的项的下标。" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'张珊'" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "incomeList[1][1]" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'五险一金'" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "incomeList[0][5]" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'980.00 '" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "incomeList[1][5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.3 在for 循环中,从Reader 对象读取数据\n", + "对于大型的CSV 文件,你需要在一个for 循环中使用Reader 对象。这样避免将整个文件一次性装入内存。例如:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "编号 姓名 基本工资 奖金 住房补助 五险一金 其他扣款 专项附加扣除\n", + "10932 张珊 15000.00 4000.00 2300.00 980.00 300.00 1000.00\n", + "10933 李思 12000.00 5000.00 2600.00 890.00 400.00 2000.00\n", + "10934 王武 10100.00 2000.00 2500.00 860.00 500.00 1500.00\n", + "10935 赵柳 10050.00 1000.00 2700.00 1080.00 300.00 2000.00\n", + "10936 钱棋 10200.00 2000.00 2400.00 1000.00 600.00 1000.00\n", + "10941 张明 13600.00 4000.00 2100.00 680.00 300.00 1000.00\n", + "10942 赵敏 13200.00 2500.00 2300.00 670.00 400.00 3000.00\n", + "10945 王红 13600.00 2600.00 2030.00 560.00 400.00 2000.00\n", + "10946 李萧 12500.00 2800.00 2400.00 420.00 500.00 1500.00\n", + "10947 孙科 12000.00 3500.00 2030.00 880.00 300.00 1000.00\n", + "10948 刘利 14200.00 2500.00 2020.00 900.00 400.00 2000.00\n" + ] + } + ], + "source": [ + "import csv\n", + "\n", + "incomeFile = open('Documents/income.csv')\n", + "incomeReader = csv.reader(incomeFile)\n", + "\n", + "for row in incomeReader:\n", + " print(\" \".join(row))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Reader对象只能循环遍历一次。要再次读取CSV文件,必须调用csv.reader,创建一个对象。例如,下面的代码什么都打印不出来:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "for row in incomeReader:\n", + " print(\" \".join(row))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.4 Writer 对象\n", + "利用Writer对象可以将数据写 CSV文件。要创建一个 Writer对象,就使用csv.writer()函数。\n", + "\n", + "将income.csv文件中的每个人的基本工资、奖金和住房补助加起来成为收入;五险一金、其他扣款和专项附加扣除加起来成为扣除,并将新的数据写入到文件incomeTotal.csv文件中:" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "编号 姓名 收入 扣除\n", + "10932 张珊 21300.0 2280.0\n", + "10933 李思 19600.0 3290.0\n", + "10934 王武 14600.0 2860.0\n", + "10935 赵柳 13750.0 3380.0\n", + "10936 钱棋 14600.0 2600.0\n", + "10941 张明 19700.0 1980.0\n", + "10942 赵敏 18000.0 4070.0\n", + "10945 王红 18230.0 2960.0\n", + "10946 李萧 17700.0 2420.0\n", + "10947 孙科 17530.0 2180.0\n", + "10948 刘利 18720.0 3300.0\n" + ] + } + ], + "source": [ + "import csv\n", + "\n", + "incomeFile = open('Documents/income.csv')\n", + "incomeReader = csv.reader(incomeFile)\n", + "\n", + "incomeTotalRows = []\n", + "incomeTotalRows.append(['编号', '姓名', '收入', '扣除'])\n", + "\n", + "for row in incomeReader:\n", + " if incomeReader.line_num == 1: #这句是做什么?\n", + " continue\n", + "\n", + " incomeTotalRows.append([row[0], row[1], float(row[2]) +float(row[3]) + float(row[4]), float(row[5]) + float(row[6]) + float(row[7])])\n", + "\n", + "incomeFile.close()\n", + "\n", + "for row in incomeTotalRows:\n", + " print(\" \".join([str(item) for item in row])) #这里又用到了列表推导式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "写入CSV 文件:" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "incomeTotalFile = open('Documents/incomeTotal.csv', 'w', newline=\"\") #newline什么作用?上网查一查\n", + "incomeTotalCSVWriter = csv.writer(incomeTotalFile)\n", + "\n", + "for row in incomeTotalRows:\n", + " incomeTotalCSVWriter.writerow(row)\n", + " \n", + "incomeTotalFile.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. 高维数据的格式化JSON\n", + "\n", + "JavaScript对象表示法是一种流行的方式,将数据格式化,成为人可读的字符串。JSON是JavaScript 程序编写数据结构的原生方式。不需要了解JavaScript,也能处理JSON格式的数据。\n", + "\n", + "与一维二维数据不同,高维数据能展示数据间更为复杂的组织关系。为了保持灵活性,表示高维数据不采用任何结构形式,仅采用最基本的二元关系,即键值对。万维网是高维数据最成功的典型应用。\n", + "JSON格式可以对高维数据进行表达和存储。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和理解。JSON格式表达键值对的基本格式如下,键值对都保存在双引号中:\n", + "
** \"key\" : \"value\" **
\n", + "\n", + "当多个键值对放在一起时,JSON有如下一些约定:\n", + "* 数据保存在键值对中;\n", + "* 键值对之间由逗号分隔;\n", + "* 括号用于保存键值对数据组成的对象;\n", + "* 方括号用于保存键值对数据组成的数组。\n", + "\n", + "下面是JSON 格式数据的一个例子:\n", + "\n", + "```Python\n", + "{\n", + "\"empNo\":\"10932\",\n", + " \"empName\":\"张珊\",\n", + " \"incomeSum\":21300.00,\n", + " \"deductionSum\":2280.00\n", + " }\n", + "```\n", + "是不是和字典很像?注意,这是一个JSON字符串。\n", + "\n", + "了解JSON 是很有用,因为很多网站都提供JSON 格式的内容,作为程序与网站交互的方式。这就是所谓的提供“应用程序编程接口(API)”。访问API 和通过\n", + "URL 访问任何其他网页是一样的。不同的是,API 返回的数据是针对机器格式化的(例如用JSON),API 不是人容易阅读的。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4.1 json 模块\n", + "Python 的json 模块处理了JSON 数据字符串和Python 值之间转换的所有细节,得到了**json.loads()**和**json.dumps()**函数。\n", + "\n", + "JSON 不能存储每一种Python 值,它只能包含以下数据类型的值:字符串、整型、浮点型、布尔型、列表、字典和NoneType。\n", + "\n", + "JSON 不能表示Python 特有的对象,如File 对象、CSV Reader 或Writer 对象、Regex对象或Selenium WebElement 对象。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1.1 用loads()函数读取JSON\n", + "要将包含JSON 数据的字符串转换为Python 的值,就将它传递给json.loads()函数(这个名字的意思是“load string”,而不是“loads”):" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "{'empNo': '10932', 'empName': '张珊', 'incomeSum': 21300.0, 'deductionSum': 2280.0}\n" + ] + } + ], + "source": [ + "empJsonData = '{\"empNo\":\"10932\",\"empName\":\"张珊\",\"incomeSum\":21300.00,\"deductionSum\":2280.00}'\n", + "\n", + "import json\n", + "empPythonValue = json.loads(empJsonData)\n", + "print(type(empPythonValue))\n", + "print()\n", + "print(empPythonValue)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "[{'empNo': '10932', 'empName': '张珊', 'incomeSum': 21300.0, 'deductionSum': 2280.0}, {'empNo': '10933', 'empName': '李思', 'incomeSum': 19600.0, 'deductionSum': 3290.0}, {'empNo': '10934', 'empName': '王武', 'incomeSum': 14600.0, 'deductionSum': 2860.0}]\n" + ] + } + ], + "source": [ + "moreEmpJsonData = '[{\"empNo\":\"10932\",\"empName\":\"张珊\",\"incomeSum\":21300.00,\"deductionSum\":2280.00},\\\n", + "{\"empNo\":\"10933\",\"empName\":\"李思\",\"incomeSum\":19600.00,\"deductionSum\":3290.00},\\\n", + "{\"empNo\":\"10934\",\"empName\":\"王武\",\"incomeSum\":14600.00,\"deductionSum\":2860.00}]'\n", + "\n", + "import json\n", + "moreEmpPythonValue = json.loads(moreEmpJsonData)\n", + "print(type(moreEmpPythonValue))\n", + "print()\n", + "print(moreEmpPythonValue)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1.2 用dumps 函数写出JSON\n", + "json.dumps()函数(它表示“dump string”,而不是“dumps”)将一个Python 值转换成JSON 格式的数据字符串。" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "empDicValue = {\"empNo\":\"10932\",\"empName\":\"张珊\",\"incomeSum\":21300.00,\"deductionSum\":2280.00} #这是一个Python字典\n", + "print(type(empDicValue))" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "{\"empNo\": \"10932\", \"empName\": \"\\u5f20\\u73ca\", \"incomeSum\": 21300.0, \"deductionSum\": 2280.0}\n" + ] + } + ], + "source": [ + "empJsonStr = json.dumps(empDicValue) #empJsonStr是一个字符串\n", + "print(type(empJsonStr))\n", + "print()\n", + "print(empJsonStr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "有了Json,就可以将Python中的列表,字典等对象转换成字符串,在互联网上传输;也可以从互联网获取Json字符串,转换成Python中的字典或列表。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4.2 实例:豆瓣电影数据分析" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import json, requests\n", + "\n", + "url = 'http://api.douban.com/v2/movie/top250'\n", + "response = requests.get(url) # 这里可能需要你更进一步学习Python\n", + "start=1\n", + "count=25\n", + "response = requests.get(url, params={'start': start, 'count': count})\n", + "response.encoding='UTF_8'\n", + "content=response.json()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "下面来分析一下这个content:" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "{'count': 25, 'start': 1, 'total': 250, 'subjects': [{'rating': {'max': 10, 'average': 9.6, 'stars': '50', 'min': 0}, 'genres': ['剧情', '爱情', '同性'], 'title': '霸王别姬', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1003494/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p67.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p67.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p67.jpg'}, 'name': '张国荣', 'id': '1003494'}, {'alt': 'https://movie.douban.com/celebrity/1050265/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p46345.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p46345.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p46345.jpg'}, 'name': '张丰毅', 'id': '1050265'}, {'alt': 'https://movie.douban.com/celebrity/1035641/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1399268395.47.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1399268395.47.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1399268395.47.jpg'}, 'name': '巩俐', 'id': '1035641'}], 'collect_count': 1359042, 'original_title': '霸王别姬', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1023040/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1451727734.81.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1451727734.81.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1451727734.81.jpg'}, 'name': '陈凯歌', 'id': '1023040'}], 'year': '1993', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910813120.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910813120.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910813120.jpg'}, 'alt': 'https://movie.douban.com/subject/1291546/', 'id': '1291546'}, {'rating': {'max': 10, 'average': 9.4, 'stars': '50', 'min': 0}, 'genres': ['剧情', '动作', '犯罪'], 'title': '这个杀手不太冷', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1025182/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p8833.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p8833.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p8833.jpg'}, 'name': '让·雷诺', 'id': '1025182'}, {'alt': 'https://movie.douban.com/celebrity/1054454/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p2274.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p2274.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p2274.jpg'}, 'name': '娜塔莉·波特曼', 'id': '1054454'}, {'alt': 'https://movie.douban.com/celebrity/1010507/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33896.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33896.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33896.jpg'}, 'name': '加里·奥德曼', 'id': '1010507'}], 'collect_count': 1766121, 'original_title': 'Léon', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1031876/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33301.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33301.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33301.jpg'}, 'name': '吕克·贝松', 'id': '1031876'}], 'year': '1994', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg'}, 'alt': 'https://movie.douban.com/subject/1295644/', 'id': '1295644'}, {'rating': {'max': 10, 'average': 9.4, 'stars': '50', 'min': 0}, 'genres': ['剧情', '爱情'], 'title': '阿甘正传', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1054450/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28603.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28603.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28603.jpg'}, 'name': '汤姆·汉克斯', 'id': '1054450'}, {'alt': 'https://movie.douban.com/celebrity/1002676/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1537890386.77.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1537890386.77.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1537890386.77.jpg'}, 'name': '罗宾·怀特', 'id': '1002676'}, {'alt': 'https://movie.douban.com/celebrity/1031848/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1345.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1345.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1345.jpg'}, 'name': '加里·西尼斯', 'id': '1031848'}], 'collect_count': 1491187, 'original_title': 'Forrest Gump', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1053564/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p505.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p505.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p505.jpg'}, 'name': '罗伯特·泽米吉斯', 'id': '1053564'}], 'year': '1994', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p510876377.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p510876377.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p510876377.jpg'}, 'alt': 'https://movie.douban.com/subject/1292720/', 'id': '1292720'}, {'rating': {'max': 10, 'average': 9.5, 'stars': '50', 'min': 0}, 'genres': ['剧情', '喜剧', '爱情'], 'title': '美丽人生', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1041004/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg'}, 'name': '罗伯托·贝尼尼', 'id': '1041004'}, {'alt': 'https://movie.douban.com/celebrity/1000375/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg'}, 'name': '尼可莱塔·布拉斯基', 'id': '1000375'}, {'alt': 'https://movie.douban.com/celebrity/1000368/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg'}, 'name': '乔治·坎塔里尼', 'id': '1000368'}], 'collect_count': 778658, 'original_title': 'La vita è bella', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1041004/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg'}, 'name': '罗伯托·贝尼尼', 'id': '1041004'}], 'year': '1997', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg'}, 'alt': 'https://movie.douban.com/subject/1292063/', 'id': '1292063'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情', '爱情', '灾难'], 'title': '泰坦尼克号', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1041029/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg'}, 'name': '莱昂纳多·迪卡普里奥', 'id': '1041029'}, {'alt': 'https://movie.douban.com/celebrity/1054446/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53358.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53358.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53358.jpg'}, 'name': '凯特·温丝莱特', 'id': '1054446'}, {'alt': 'https://movie.douban.com/celebrity/1031864/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45186.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45186.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45186.jpg'}, 'name': '比利·赞恩', 'id': '1031864'}], 'collect_count': 1372888, 'original_title': 'Titanic', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1022571/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33715.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33715.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33715.jpg'}, 'name': '詹姆斯·卡梅隆', 'id': '1022571'}], 'year': '1997', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p457760035.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p457760035.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p457760035.jpg'}, 'alt': 'https://movie.douban.com/subject/1292722/', 'id': '1292722'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情', '动画', '奇幻'], 'title': '千与千寻', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1023337/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1463193210.13.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1463193210.13.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1463193210.13.jpg'}, 'name': '柊瑠美', 'id': '1023337'}, {'alt': 'https://movie.douban.com/celebrity/1005438/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44986.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44986.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44986.jpg'}, 'name': '入野自由', 'id': '1005438'}, {'alt': 'https://movie.douban.com/celebrity/1045797/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1376151005.51.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1376151005.51.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1376151005.51.jpg'}, 'name': '夏木真理', 'id': '1045797'}], 'collect_count': 1263257, 'original_title': '千と千尋の神隠し', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054439/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg'}, 'name': '宫崎骏', 'id': '1054439'}], 'year': '2001', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1606727862.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1606727862.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1606727862.jpg'}, 'alt': 'https://movie.douban.com/subject/1291561/', 'id': '1291561'}, {'rating': {'max': 10, 'average': 9.5, 'stars': '50', 'min': 0}, 'genres': ['剧情', '历史', '战争'], 'title': '辛德勒的名单', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1031220/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44906.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44906.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44906.jpg'}, 'name': '连姆·尼森', 'id': '1031220'}, {'alt': 'https://movie.douban.com/celebrity/1054393/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1374649659.58.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1374649659.58.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1374649659.58.jpg'}, 'name': '本·金斯利', 'id': '1054393'}, {'alt': 'https://movie.douban.com/celebrity/1006956/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28941.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28941.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28941.jpg'}, 'name': '拉尔夫·费因斯', 'id': '1006956'}], 'collect_count': 725172, 'original_title': \"Schindler's List\", 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054440/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34602.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34602.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34602.jpg'}, 'name': '史蒂文·斯皮尔伯格', 'id': '1054440'}], 'year': '1993', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p492406163.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p492406163.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p492406163.jpg'}, 'alt': 'https://movie.douban.com/subject/1295124/', 'id': '1295124'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情', '科幻', '悬疑'], 'title': '盗梦空间', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1041029/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg'}, 'name': '莱昂纳多·迪卡普里奥', 'id': '1041029'}, {'alt': 'https://movie.douban.com/celebrity/1101703/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3517.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3517.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3517.jpg'}, 'name': '约瑟夫·高登-莱维特', 'id': '1101703'}, {'alt': 'https://movie.douban.com/celebrity/1012520/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p118.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p118.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p118.jpg'}, 'name': '艾伦·佩吉', 'id': '1012520'}], 'collect_count': 1495410, 'original_title': 'Inception', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054524/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg'}, 'name': '克里斯托弗·诺兰', 'id': '1054524'}], 'year': '2010', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p513344864.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p513344864.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p513344864.jpg'}, 'alt': 'https://movie.douban.com/subject/3541415/', 'id': '3541415'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情'], 'title': '忠犬八公的故事', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1040997/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33013.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33013.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33013.jpg'}, 'name': '理查·基尔', 'id': '1040997'}, {'alt': 'https://movie.douban.com/celebrity/1049499/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5502.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5502.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5502.jpg'}, 'name': '萨拉·罗默尔', 'id': '1049499'}, {'alt': 'https://movie.douban.com/celebrity/1025215/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p17520.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p17520.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p17520.jpg'}, 'name': '琼·艾伦', 'id': '1025215'}], 'collect_count': 1083236, 'original_title': \"Hachi: A Dog's Tale\", 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1018014/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4333.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4333.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4333.jpg'}, 'name': '拉斯·霍尔斯道姆', 'id': '1018014'}], 'year': '2009', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p524964016.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p524964016.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p524964016.jpg'}, 'alt': 'https://movie.douban.com/subject/3011091/', 'id': '3011091'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['爱情', '科幻', '动画'], 'title': '机器人总动员', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1009535/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13028.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13028.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13028.jpg'}, 'name': '本·贝尔特', 'id': '1009535'}, {'alt': 'https://movie.douban.com/celebrity/1000389/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519794715.93.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519794715.93.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519794715.93.jpg'}, 'name': '艾丽莎·奈特', 'id': '1000389'}, {'alt': 'https://movie.douban.com/celebrity/1018022/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31068.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31068.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31068.jpg'}, 'name': '杰夫·格尔林', 'id': '1018022'}], 'collect_count': 952565, 'original_title': 'WALL·E', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1036450/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1467359656.96.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1467359656.96.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1467359656.96.jpg'}, 'name': '安德鲁·斯坦顿', 'id': '1036450'}], 'year': '2008', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1461851991.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1461851991.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1461851991.jpg'}, 'alt': 'https://movie.douban.com/subject/2131459/', 'id': '2131459'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['剧情', '喜剧', '爱情'], 'title': '三傻大闹宝莱坞', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1031931/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13628.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13628.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13628.jpg'}, 'name': '阿米尔·汗', 'id': '1031931'}, {'alt': 'https://movie.douban.com/celebrity/1049635/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5568.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5568.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5568.jpg'}, 'name': '卡琳娜·卡普尔', 'id': '1049635'}, {'alt': 'https://movie.douban.com/celebrity/1018290/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5651.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5651.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5651.jpg'}, 'name': '马达范', 'id': '1018290'}], 'collect_count': 1257107, 'original_title': '3 Idiots', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1286677/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16549.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16549.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16549.jpg'}, 'name': '拉吉库马尔·希拉尼', 'id': '1286677'}], 'year': '2009', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p579729551.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p579729551.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p579729551.jpg'}, 'alt': 'https://movie.douban.com/subject/3793023/', 'id': '3793023'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '50', 'min': 0}, 'genres': ['剧情', '音乐'], 'title': '海上钢琴师', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1025176/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p6281.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p6281.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p6281.jpg'}, 'name': '蒂姆·罗斯', 'id': '1025176'}, {'alt': 'https://movie.douban.com/celebrity/1010659/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1355152571.6.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1355152571.6.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1355152571.6.jpg'}, 'name': '普路特·泰勒·文斯', 'id': '1010659'}, {'alt': 'https://movie.douban.com/celebrity/1027407/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12333.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12333.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12333.jpg'}, 'name': '比尔·努恩', 'id': '1027407'}], 'collect_count': 1062029, 'original_title': \"La leggenda del pianista sull'oceano\", 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1018983/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p195.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p195.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p195.jpg'}, 'name': '朱塞佩·托纳多雷', 'id': '1018983'}], 'year': '1998', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p511146807.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p511146807.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p511146807.jpg'}, 'alt': 'https://movie.douban.com/subject/1292001/', 'id': '1292001'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情', '音乐'], 'title': '放牛班的春天', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1048281/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3363.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3363.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3363.jpg'}, 'name': '热拉尔·朱尼奥', 'id': '1048281'}, {'alt': 'https://movie.douban.com/celebrity/1054351/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9329.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9329.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9329.jpg'}, 'name': '弗朗索瓦·贝莱昂', 'id': '1054351'}, {'alt': 'https://movie.douban.com/celebrity/1000491/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44424.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44424.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44424.jpg'}, 'name': '凯德·麦拉德', 'id': '1000491'}], 'collect_count': 952740, 'original_title': 'Les choristes', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1277959/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24744.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24744.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24744.jpg'}, 'name': '克里斯托夫·巴拉蒂', 'id': '1277959'}], 'year': '2004', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910824951.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910824951.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910824951.jpg'}, 'alt': 'https://movie.douban.com/subject/1291549/', 'id': '1291549'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['剧情', '科幻'], 'title': '楚门的世界', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1054438/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p615.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p615.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p615.jpg'}, 'name': '金·凯瑞', 'id': '1054438'}, {'alt': 'https://movie.douban.com/celebrity/1053572/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p516.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p516.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p516.jpg'}, 'name': '劳拉·琳妮', 'id': '1053572'}, {'alt': 'https://movie.douban.com/celebrity/1048024/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1485163747.76.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1485163747.76.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1485163747.76.jpg'}, 'name': '艾德·哈里斯', 'id': '1048024'}], 'collect_count': 982531, 'original_title': 'The Truman Show', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1022721/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4360.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4360.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4360.jpg'}, 'name': '彼得·威尔', 'id': '1022721'}], 'year': '1998', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p479682972.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p479682972.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p479682972.jpg'}, 'alt': 'https://movie.douban.com/subject/1292064/', 'id': '1292064'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['喜剧', '爱情', '奇幻'], 'title': '大话西游之大圣娶亲', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1048026/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p47421.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p47421.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p47421.jpg'}, 'name': '周星驰', 'id': '1048026'}, {'alt': 'https://movie.douban.com/celebrity/1016771/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45481.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45481.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45481.jpg'}, 'name': '吴孟达', 'id': '1016771'}, {'alt': 'https://movie.douban.com/celebrity/1041734/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p49237.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p49237.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p49237.jpg'}, 'name': '朱茵', 'id': '1041734'}], 'collect_count': 999499, 'original_title': '西遊記大結局之仙履奇緣', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1274431/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45374.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45374.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45374.jpg'}, 'name': '刘镇伟', 'id': '1274431'}], 'year': '1995', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2455050536.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2455050536.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2455050536.jpg'}, 'alt': 'https://movie.douban.com/subject/1292213/', 'id': '1292213'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '50', 'min': 0}, 'genres': ['剧情', '科幻', '冒险'], 'title': '星际穿越', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1040511/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1392653727.04.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1392653727.04.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1392653727.04.jpg'}, 'name': '马修·麦康纳', 'id': '1040511'}, {'alt': 'https://movie.douban.com/celebrity/1048027/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p10467.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p10467.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p10467.jpg'}, 'name': '安妮·海瑟薇', 'id': '1048027'}, {'alt': 'https://movie.douban.com/celebrity/1000225/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54076.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54076.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54076.jpg'}, 'name': '杰西卡·查斯坦', 'id': '1000225'}], 'collect_count': 988796, 'original_title': 'Interstellar', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054524/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg'}, 'name': '克里斯托弗·诺兰', 'id': '1054524'}], 'year': '2014', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p2206088801.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p2206088801.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p2206088801.jpg'}, 'alt': 'https://movie.douban.com/subject/1889243/', 'id': '1889243'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['动画', '奇幻', '冒险'], 'title': '龙猫', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1019382/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1455201170.02.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1455201170.02.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1455201170.02.jpg'}, 'name': '日高法子', 'id': '1019382'}, {'alt': 'https://movie.douban.com/celebrity/1025582/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p29537.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p29537.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p29537.jpg'}, 'name': '坂本千夏', 'id': '1025582'}, {'alt': 'https://movie.douban.com/celebrity/1379738/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1503457262.72.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1503457262.72.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1503457262.72.jpg'}, 'name': '糸井重里', 'id': '1379738'}], 'collect_count': 894110, 'original_title': 'となりのトトロ', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054439/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg'}, 'name': '宫崎骏', 'id': '1054439'}], 'year': '1988', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2540924496.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2540924496.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2540924496.jpg'}, 'alt': 'https://movie.douban.com/subject/1291560/', 'id': '1291560'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '50', 'min': 0}, 'genres': ['剧情', '犯罪'], 'title': '教父', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1041025/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45035.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45035.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45035.jpg'}, 'name': '马龙·白兰度', 'id': '1041025'}, {'alt': 'https://movie.douban.com/celebrity/1054451/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p645.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p645.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p645.jpg'}, 'name': '阿尔·帕西诺', 'id': '1054451'}, {'alt': 'https://movie.douban.com/celebrity/1000050/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53524.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53524.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53524.jpg'}, 'name': '詹姆斯·肯恩', 'id': '1000050'}], 'collect_count': 639773, 'original_title': 'The Godfather', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054419/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p592.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p592.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p592.jpg'}, 'name': '弗朗西斯·福特·科波拉', 'id': '1054419'}], 'year': '1972', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1853232210.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1853232210.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1853232210.jpg'}, 'alt': 'https://movie.douban.com/subject/1291841/', 'id': '1291841'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情'], 'title': '熔炉', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1011009/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p55195.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p55195.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p55195.jpg'}, 'name': '孔侑', 'id': '1011009'}, {'alt': 'https://movie.douban.com/celebrity/1276062/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1409765749.47.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1409765749.47.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1409765749.47.jpg'}, 'name': '郑有美', 'id': '1276062'}, {'alt': 'https://movie.douban.com/celebrity/1331104/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1393488191.45.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1393488191.45.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1393488191.45.jpg'}, 'name': '金志映', 'id': '1331104'}], 'collect_count': 533221, 'original_title': '도가니', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1317274/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p52558.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p52558.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p52558.jpg'}, 'name': '黄东赫', 'id': '1317274'}], 'year': '2011', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p1363250216.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p1363250216.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p1363250216.jpg'}, 'alt': 'https://movie.douban.com/subject/5912992/', 'id': '5912992'}, {'rating': {'max': 10, 'average': 9.1, 'stars': '45', 'min': 0}, 'genres': ['剧情', '犯罪', '悬疑'], 'title': '无间道', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1054424/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378956633.91.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378956633.91.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378956633.91.jpg'}, 'name': '刘德华', 'id': '1054424'}, {'alt': 'https://movie.douban.com/celebrity/1115918/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33525.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33525.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33525.jpg'}, 'name': '梁朝伟', 'id': '1115918'}, {'alt': 'https://movie.douban.com/celebrity/1050076/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24841.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24841.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24841.jpg'}, 'name': '黄秋生', 'id': '1050076'}], 'collect_count': 865015, 'original_title': '無間道', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1106979/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1403267018.07.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1403267018.07.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1403267018.07.jpg'}, 'name': '刘伟强', 'id': '1106979'}, {'alt': 'https://movie.douban.com/celebrity/1126158/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3547.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3547.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3547.jpg'}, 'name': '麦兆辉', 'id': '1126158'}], 'year': '2002', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2233971046.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2233971046.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2233971046.jpg'}, 'alt': 'https://movie.douban.com/subject/1307914/', 'id': '1307914'}, {'rating': {'max': 10, 'average': 9.0, 'stars': '45', 'min': 0}, 'genres': ['剧情', '传记', '家庭'], 'title': '当幸福来敲门', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1027138/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31885.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31885.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31885.jpg'}, 'name': '威尔·史密斯', 'id': '1027138'}, {'alt': 'https://movie.douban.com/celebrity/1010532/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519305434.22.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519305434.22.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519305434.22.jpg'}, 'name': '贾登·史密斯', 'id': '1010532'}, {'alt': 'https://movie.douban.com/celebrity/1040513/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378018910.89.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378018910.89.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378018910.89.jpg'}, 'name': '坦迪·牛顿', 'id': '1040513'}], 'collect_count': 1047350, 'original_title': 'The Pursuit of Happyness', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1045093/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p20409.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p20409.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p20409.jpg'}, 'name': '加布里埃莱·穆奇诺', 'id': '1045093'}], 'year': '2006', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1312700744.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1312700744.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1312700744.jpg'}, 'alt': 'https://movie.douban.com/subject/1849031/', 'id': '1849031'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['喜剧', '动画', '冒险'], 'title': '疯狂动物城', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1017930/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4815.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4815.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4815.jpg'}, 'name': '金妮弗·古德温', 'id': '1017930'}, {'alt': 'https://movie.douban.com/celebrity/1013760/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p18772.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p18772.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p18772.jpg'}, 'name': '杰森·贝特曼', 'id': '1013760'}, {'alt': 'https://movie.douban.com/celebrity/1049501/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1410696282.74.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1410696282.74.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1410696282.74.jpg'}, 'name': '伊德里斯·艾尔巴', 'id': '1049501'}], 'collect_count': 1001044, 'original_title': 'Zootopia', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1286985/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505519.94.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505519.94.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505519.94.jpg'}, 'name': '拜伦·霍华德', 'id': '1286985'}, {'alt': 'https://movie.douban.com/celebrity/1324037/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505501.8.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505501.8.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505501.8.jpg'}, 'name': '瑞奇·摩尔', 'id': '1324037'}, {'alt': 'https://movie.douban.com/celebrity/1304069/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1456810614.66.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1456810614.66.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1456810614.66.jpg'}, 'name': '杰拉德·布什', 'id': '1304069'}], 'year': '2016', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2315672647.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2315672647.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2315672647.jpg'}, 'alt': 'https://movie.douban.com/subject/25662329/', 'id': '25662329'}, {'rating': {'max': 10, 'average': 9.0, 'stars': '45', 'min': 0}, 'genres': ['剧情', '喜剧', '爱情'], 'title': '怦然心动', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1031867/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16442.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16442.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16442.jpg'}, 'name': '玛德琳·卡罗尔', 'id': '1031867'}, {'alt': 'https://movie.douban.com/celebrity/1004751/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p22277.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p22277.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p22277.jpg'}, 'name': '卡兰·麦克奥利菲', 'id': '1004751'}, {'alt': 'https://movie.douban.com/celebrity/1049546/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12355.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12355.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12355.jpg'}, 'name': '瑞贝卡·德·莫妮', 'id': '1049546'}], 'collect_count': 1140756, 'original_title': 'Flipped', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1031903/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1379484184.83.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1379484184.83.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1379484184.83.jpg'}, 'name': '罗伯·莱纳', 'id': '1031903'}], 'year': '2010', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p663036666.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p663036666.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p663036666.jpg'}, 'alt': 'https://movie.douban.com/subject/3319755/', 'id': '3319755'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['剧情', '喜剧'], 'title': '触不可及', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1050210/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1375092314.14.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1375092314.14.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1375092314.14.jpg'}, 'name': '弗朗索瓦·克鲁塞', 'id': '1050210'}, {'alt': 'https://movie.douban.com/celebrity/1220507/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41401.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41401.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41401.jpg'}, 'name': '奥玛·希', 'id': '1220507'}, {'alt': 'https://movie.douban.com/celebrity/1289597/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p42048.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p42048.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p42048.jpg'}, 'name': '安娜·勒尼', 'id': '1289597'}], 'collect_count': 666066, 'original_title': 'Intouchables', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1001404/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41640.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41640.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41640.jpg'}, 'name': '奥利维埃·纳卡什', 'id': '1001404'}, {'alt': 'https://movie.douban.com/celebrity/1010884/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p50463.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p50463.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p50463.jpg'}, 'name': '埃里克·托莱达诺', 'id': '1010884'}], 'year': '2011', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1454261925.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1454261925.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1454261925.jpg'}, 'alt': 'https://movie.douban.com/subject/6786002/', 'id': '6786002'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '50', 'min': 0}, 'genres': ['剧情', '历史', '爱情'], 'title': '乱世佳人', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1010506/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3151.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3151.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3151.jpg'}, 'name': '费雯·丽', 'id': '1010506'}, {'alt': 'https://movie.douban.com/celebrity/1006997/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5289.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5289.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5289.jpg'}, 'name': '克拉克·盖博', 'id': '1006997'}, {'alt': 'https://movie.douban.com/celebrity/1010604/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4239.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4239.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4239.jpg'}, 'name': '奥利维娅·德哈维兰', 'id': '1010604'}], 'collect_count': 486030, 'original_title': 'Gone with the Wind', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1032275/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p11303.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p11303.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p11303.jpg'}, 'name': '维克多·弗莱明', 'id': '1032275'}, {'alt': 'https://movie.douban.com/celebrity/1010711/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p19067.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p19067.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p19067.jpg'}, 'name': '乔治·库克', 'id': '1010711'}, {'alt': 'https://movie.douban.com/celebrity/1012588/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54831.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54831.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54831.jpg'}, 'name': '山姆·伍德', 'id': '1012588'}], 'year': '1939', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1963126880.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1963126880.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1963126880.jpg'}, 'alt': 'https://movie.douban.com/subject/1300267/', 'id': '1300267'}], 'title': '豆瓣电影Top250'}\n" + ] + } + ], + "source": [ + "print(type(content))\n", + "print(content)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "content是个字典,包括了count, start, total和subjects这些键,他们分别可能是什么?\n", + "\n", + "看看subjects里面的东西:" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "movies = content['subjects']" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'alt': 'https://movie.douban.com/subject/1292063/',\n", + " 'casts': [{'alt': 'https://movie.douban.com/celebrity/1041004/',\n", + " 'avatars': {'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg',\n", + " 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg',\n", + " 'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg'},\n", + " 'id': '1041004',\n", + " 'name': '罗伯托·贝尼尼'},\n", + " {'alt': 'https://movie.douban.com/celebrity/1000375/',\n", + " 'avatars': {'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg',\n", + " 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg',\n", + " 'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg'},\n", + " 'id': '1000375',\n", + " 'name': '尼可莱塔·布拉斯基'},\n", + " {'alt': 'https://movie.douban.com/celebrity/1000368/',\n", + " 'avatars': {'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg',\n", + " 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg',\n", + " 'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg'},\n", + " 'id': '1000368',\n", + " 'name': '乔治·坎塔里尼'}],\n", + " 'collect_count': 778658,\n", + " 'directors': [{'alt': 'https://movie.douban.com/celebrity/1041004/',\n", + " 'avatars': {'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg',\n", + " 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg',\n", + " 'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg'},\n", + " 'id': '1041004',\n", + " 'name': '罗伯托·贝尼尼'}],\n", + " 'genres': ['剧情', '喜剧', '爱情'],\n", + " 'id': '1292063',\n", + " 'images': {'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg',\n", + " 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg',\n", + " 'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg'},\n", + " 'original_title': 'La vita è bella',\n", + " 'rating': {'average': 9.5, 'max': 10, 'min': 0, 'stars': '50'},\n", + " 'subtype': 'movie',\n", + " 'title': '美丽人生',\n", + " 'year': '1997'}" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "movies[3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "看上去是一部电影的信息。 \n", + "\n", + "打印出每部电影的名称,评分,年份,主演,导演:" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "霸王别姬 1993 9.6张国荣,张丰毅,巩俐 陈凯歌 \n", + "这个杀手不太冷 1994 9.4让·雷诺,娜塔莉·波特曼,加里·奥德曼 吕克·贝松 \n", + "阿甘正传 1994 9.4汤姆·汉克斯,罗宾·怀特,加里·西尼斯 罗伯特·泽米吉斯 \n", + "美丽人生 1997 9.5罗伯托·贝尼尼,尼可莱塔·布拉斯基,乔治·坎塔里尼 罗伯托·贝尼尼 \n", + "泰坦尼克号 1997 9.3莱昂纳多·迪卡普里奥,凯特·温丝莱特,比利·赞恩 詹姆斯·卡梅隆 \n", + "千与千寻 2001 9.3柊瑠美,入野自由,夏木真理 宫崎骏 \n", + "辛德勒的名单 1993 9.5连姆·尼森,本·金斯利,拉尔夫·费因斯 史蒂文·斯皮尔伯格 \n", + "盗梦空间 2010 9.3莱昂纳多·迪卡普里奥,约瑟夫·高登-莱维特,艾伦·佩吉 克里斯托弗·诺兰 \n", + "忠犬八公的故事 2009 9.3理查·基尔,萨拉·罗默尔,琼·艾伦 拉斯·霍尔斯道姆 \n", + "机器人总动员 2008 9.3本·贝尔特,艾丽莎·奈特,杰夫·格尔林 安德鲁·斯坦顿 \n", + "三傻大闹宝莱坞 2009 9.2阿米尔·汗,卡琳娜·卡普尔,马达范 拉吉库马尔·希拉尼 \n", + "海上钢琴师 1998 9.2蒂姆·罗斯,普路特·泰勒·文斯,比尔·努恩 朱塞佩·托纳多雷 \n", + "放牛班的春天 2004 9.3热拉尔·朱尼奥,弗朗索瓦·贝莱昂,凯德·麦拉德 克里斯托夫·巴拉蒂 \n", + "楚门的世界 1998 9.2金·凯瑞,劳拉·琳妮,艾德·哈里斯 彼得·威尔 \n", + "大话西游之大圣娶亲 1995 9.2周星驰,吴孟达,朱茵 刘镇伟 \n", + "星际穿越 2014 9.2马修·麦康纳,安妮·海瑟薇,杰西卡·查斯坦 克里斯托弗·诺兰 \n", + "龙猫 1988 9.2日高法子,坂本千夏,糸井重里 宫崎骏 \n", + "教父 1972 9.2马龙·白兰度,阿尔·帕西诺,詹姆斯·肯恩 弗朗西斯·福特·科波拉\n", + "熔炉 2011 9.3孔侑,郑有美,金志映 黄东赫 \n", + "无间道 2002 9.1刘德华,梁朝伟,黄秋生 刘伟强,麦兆辉 \n", + "当幸福来敲门 2006 9.0威尔·史密斯,贾登·史密斯,坦迪·牛顿 加布里埃莱·穆奇诺 \n", + "疯狂动物城 2016 9.2金妮弗·古德温,杰森·贝特曼,伊德里斯·艾尔巴 拜伦·霍华德,瑞奇·摩尔,杰拉德·布什\n", + "怦然心动 2010 9.0玛德琳·卡罗尔,卡兰·麦克奥利菲,瑞贝卡·德·莫妮 罗伯·莱纳 \n", + "触不可及 2011 9.2弗朗索瓦·克鲁塞,奥玛·希,安娜·勒尼 奥利维埃·纳卡什,埃里克·托莱达诺\n", + "乱世佳人 1939 9.2费雯·丽,克拉克·盖博,奥利维娅·德哈维兰 维克多·弗莱明,乔治·库克,山姆·伍德\n" + ] + } + ], + "source": [ + "for movie in movies:\n", + " title = movie['title'].strip()\n", + " year = movie['year'].strip()\n", + " rate = movie['rating']['average']\n", + " casts = ','.join([item['name'] for item in movie['casts']])\n", + " directors = ','.join([item['name'] for item in movie['directors']])\n", + " \n", + " print('{title:<{len1}}{year:<6}{rate:3.1f}{casts:<{len2}}{directors:<{len3}}'.format(title=title,len1=22-len(title.encode('GBK'))+len(title), \n", + " year=year, \n", + " rate=rate, \n", + " casts=casts,len2=55-len(casts.encode('GBK'))+len(casts), \n", + " directors=directors,len3=22-len(directors.encode('GBK'))+len(directors)))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*** 上面的format语句现在理解不到没有关系,也许你可以在网上查一查。***\n", + "\n", + "### 思考:如果希望按照评分由高到低打印出来,可以怎么做?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 5. 小结\n", + "\n", + "文件被组织在文件夹中(也称为目录),路径描述了一个文件的位置。运行在计算机上的每个程序都有一个当前工作目录,它让你相对于当前的位置指定文件路径,而非总是需要完整路径(绝对路径)。os.path 模块包含许多函数,用于操作文件路径。\n", + "\n", + "程序也可以直接操作文本文件的内容。open()函数将打开这些文件,将它们的内容读取为一个大字符串(利用read()方法),或读取为字符串的列表(利用方\n", + "法readlines())。Open()函数可以将文件以写模式或添加模式打开,分别创建新的文本文件或在原有的文本文件中添加内容。\n", + "\n", + "\n", + "CSV 和JSON 是常见的纯文本格式,用于保存数据。它们很容易被程序解析,同时仍然让人可读,所以它们经常被用作简单的电子表格或网络应用程序的数据。csv 和json 模块大大简化了读取和写入CSV 和JSON 文件的过程。\n", + "\n", + "一个常见的任务是接受多种格式的数据,解析它,并获得需要的特定信息。这些任务往往非常特别,商业软件并不是最有帮助的。通过编写自己的脚本,可以让计算机处理大量以这些格式呈现的数据。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 练习\n", + "**(1)** 相对路径是相对于什么?
\n", + "\n", + "**(2)** 绝对路径从什么开始?
\n", + "\n", + "**(3)** os.getcwd()和os.chdir()函数做什么事?
\n", + "\n", + "**(4)** read()和readlines()方法之间的区别是什么?\n", + "\n", + "**(5)** 向csv.reader()和csv.writer()传入什么,来创建Reader 和Writer 对象?\n", + "\n", + "**(6)** 对于Reader 和Writer 对象,File 对象需要以什么模式打开?
\n", + "\n", + "**(7)** 什么函数接受一个JSON 数据的字符串,并返回一个Python 数据结构?
\n", + "\n", + "**(8)** 什么函数接受一个Python 数据结构,并返回一个JSON 数据的字符串?
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 作业:商城销售统计" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "假设你是学生实验超市的销售总监,每个月你会收到销售数据,这些数据存在CSV文件中,文件内容看起来像这样:\n", + "\n", + "\n", + "其中order_id是订单号,goods_id是商品代码,goods_name是商品名称,unit_price是商品单价,quantity是销售数量,return_qty是退货数量。\n", + "\n", + "现在你有2018年1月至4月份销售数据,分别存在2018_01.csv,2018_02.csv,2018_03.csv,2018_04.csv文件中,请做出以下统计:\n", + "* 每个月的销售额,以及4个月的销售总额写入到salesAmount.txt文件中,每个月的数据和总额数据各占1行(共5行)。你的文件应该看起来像:\n", + "\n", + "* 每个月销售额最高的10种商品的商品代码,商品名称,销售数量,销售额分别写入到1个文件中,文件名分别为:salesTop10_01.txt,salesTop10_02.txt,salesTop10_03.txt,salesTop10_04.txt。你的每个文件应该看起来像:\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "将作业的程序源文件保存在12345678.py文件中作为第5次作业的附件,其中12345678需要替换成你的学号,发送到xzl_swufe@163.com。

\n", + "邮件标题必须类似于:作业7_12345678。其中12345678需要替换成你的学号。

邮件标题必须类似于:作业7_12345678。其中12345678需要替换成你的学号。

邮件标题必须类似于:作业7_12345678。其中12345678需要替换成你的学号。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}