7. 文件和数据格式化

本文详细介绍了Python中关于文件和数据格式化的操作,包括文件路径处理、文件读写、CSV文件处理和JSON数据的读写。重点讲解了如何在不同操作系统上处理路径、使用os模块进行文件操作、csv模块读写CSV文件以及json模块将Python数据转化为JSON格式。通过实例演示了如何读取、写入和解析JSON数据,以及如何处理CSV文件。
摘要由CSDN通过智能技术生成

7. 文件和数据格式化

1. 文件与文件路径

文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象,类似地,函数是程序的集合和抽象。用文件形式组织和表达数据更有效也更为灵活。

文件有两个关键属性:“文件名”(通常写成一个单词)和“路径”。路径指明了文件在计算机上的位置。例如,我的电脑本上有一个文件名为projects.docx,
它的路径在C:\Users\asweigart\Documents。文件名中,最后一个句点之后的部分称为文件的“扩展名”,它指出了文件的类型。project.docx 是一个Word 文档,Users、asweigart和Documents 都是指“文件夹”(也成为目录)。文件夹可以包含文件和其他文件夹。
在这里插入图片描述

1.1 Windows 上的倒斜杠以及OS X 和Linux 上的正斜杠

在Windows 上,路径书写使用倒斜杠作为文件夹之间的分隔符。但在OS X 和Linux 上,使用正斜杠作为它们的路径分隔符。如果想要程序运行在所有操作系统
上,在编写Python 脚本时,就必须处理这两种情况。

好在,用os.path.join()函数来做这件事很简单。如果将单个文件和路径上的文件夹名称的字符串传递给它,os.path.join()就会返回一个文件路径的字符串,包含正确的路径分隔符。

import os
os.path.join('users','swufe','Documents','python.docx')
-------------------------------------------------------------------------
'users\\swufe\\Documents\\python.docx'
myFiles = ['2019-01-10-1.jpg', 'myPhoto1.png', 'mountain.jpg']
for fileName in myFiles:
    print(os.path.join('d:\\Pictures', fileName))
--------------------------------------------------------------------------
d:\Pictures\2019-01-10-1.jpg
d:\Pictures\myPhoto1.png
d:\Pictures\mountain.jpg

1.2 当前工作目录

每个运行在计算机上的程序,都有一个“当前工作目录”,或cwd。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。利用os.getcwd()函数,可以取得当前工作路径的字符串,并可以利用os.chdir()改变它。

import os
os.getcwd()
os.chdir("c:\\windows\\system32")
os.getcwd()
--------------------------------------------------------------------------
'C:\\Users\\lenovo\\Desktop\\Python基础课件'
'c:\\windows\\system32'

1.3 绝对路径与相对路径

有两种方法指定一个文件路径。

  • “绝对路径”,总是从根文件夹开始。
  • “相对路径”,它相对于程序的当前工作目录。

还有点(.)和点点(…)文件夹。它们不是真正的文件夹,而是可以在路径中使用的特殊名称。单个的句点(“点”)用作文件夹目名称时,是“这个目录”的缩写。两个句点(“点点”)意思是父文件夹。

os.path 模块提供了一些函数,返回一个相对路径的绝对路径,以及检查给定的
路径是否为绝对路径。

  • 调用os.path.abspath(path)将返回参数的绝对路径的字符串。这是将相对路径转换为绝对路径的简便方法。
  • 调用os.path.isabs(path),如果参数是一个绝对路径,就返回True,如果参数是一个相对路径,就返回False。
  • 调用os.path.relpath(path, start)将返回从start 路径到path 的相对路径的字符串。如果没有提供start,就使用当前工作目录作为开始路径。
os.path.abspath('.') 
--------------------------------
'c:\\windows\\system32'
os.path.abspath('.\\Scripts')
---------------------------------------------------------
'c:\\windows\\system32\\Scripts'
os.path.isabs('.')
-----------------------
False
os.path.relpath('C:\\Windows', 'C:\\')
-------------------------------------------
'Windows'
os.path.relpath('C:\\Windows', 'C:\\Pictures\\2018')
---------------------------------------------------
'..\\..\\Windows'
  • 调用os.path.dirname(path)将返回一个字符串,它包含path 参数中最后一个斜杠之前的所有内容。
  • 调用os.path.basename(path)将返回回一个字符串,它包含path 参数中最后一个斜杠之后的所有内容。
path = 'C:\\Windows\\System32\\calc.exe'
os.path.basename(path)
---------------------------------------------
'calc.exe'
os.path.dirname(path)
----------------------------------------------
'C:\\Windows\\System32'
  • 如果同时需要一个路径的目录名称和基本名称,就可以调用os.path.split(),获得这两个字符串的元组,像这样:
calcFilePath = 'C:\\Windows\\System32\\calc.exe'
os.path.split(calcFilePath)
--------------------------------------------------------------------------
('C:\\Windows\\System32', 'calc.exe')
  • 同时也请注意,os.path.split()不会接受一个文件路径并返回每个文件夹的字符串的列表。如果需要这样,请使用split()字符串方法,并根据os.path.sep 中的字符串进行分割。回忆一下,根据程序运行的计算机,os.path.sep变量设置为正确的文件夹分割斜杠。
calcFilePath.split(os.path.sep)
---------------------------------------------
['C:', 'Windows', 'System32', 'calc.exe']

1.4 用os.makedirs()创建新文件夹

程序可以用os.makedirs()函数创建新文件夹(目录)。

import os
os.makedirs("c:\\myFolder")

1.5 查看文件大小和文件夹内容

一旦有办法处理文件路径,就可以开始搜集特定文件和文件夹的信息。os.path 模块提供了一些函数,用于查看文件的字节数以及给定文件夹中的文件和子文件夹。

  • 调用os.path.getsize(path)将返回path 参数中文件的字节数。
  • 调用os.listdir(path)将返回文件名字符串的列表,包含path 参数中的每个文件(请注意,这个函数在os 模块中,而不是os.path)。
os.path.getsize('C:\\Windows\\System32\\calc.exe')
---------------------------------------------------------
27648
os.listdir('C:\\Windows\\System32')
-----------------------------------------------
  • 如果想知道这个目录下所有文件的总字节数,就可以同时使用os.path.getsize()和os.listdir()。
totalSize = 0
for filename in os.listdir('C:\\Windows\\System32'):
    totalSize = totalSize + os.path.getsize(os.path.join('C:\\Windows\\System32', filename))
print(totalSize/1024/1024)
----------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值