Python(28)-文件,os模塊

文件

  • 1. 文件
  • 2. 文件的基本操作
  • 3. 讀取文件open()
    • 3.1 文件指針: 標記從哪一個位置開始讀取數據.
    • 3.2 文件的打開方式mode
    • 3.3 文件按行讀取
      • 3.3.1 readline()
      • 3.3.2 readlines()
  • 4.文件輸出f.write(),print()
  • 5.文件復制
    • 5.1 小文件復制(搬家)
    • 5.2 大文件復制(搬家)
    • 5.3 shutil.copy()
    • 5.4 shutil.rmtree()
  • 6.os 模塊
    • 6.1 改變工作目錄os.chdir()
    • 6.2 文件重命名os.rename()
    • 6.3 刪除文件os.remove()
    • 6.4 刪除空路徑os.removedirs()
    • 6.5 目錄列表os.listdir()
    • 6.6 創建目錄os.mkdir()
    • 6.7 刪除目錄os.rmdir()
    • 6.8 判斷某個目錄是否存在,如果不在,創建這個目錄
    • 6.9 os.path.split("xxx/xx/xxxx")
    • 6.10 os.path.isdir()
  • 7.CSV文件
  • 8.JSON文件
  • 9.文本文件的編碼方式
  • 10.在Python2.x中使用中文
  • 11.eval()

本系列博文來自學習《Python基礎視頻教程》筆記整理,視屏教程連接地址:http://yun.itheima.com/course/273.html

open 不僅能打開txt文件,還能打開.csv,.JSON 文件。🐂🍺呀。

1. 文件

計算機的文件就是保存在 長期存儲設備 上的一段數據,長期存儲設備包括:硬盤 U盤 移動硬盤 光盤.
文件的作用:將數據長期保存下來,在需要的時候使用.
cpu 要使用 存在硬盤中文件,需要先將文件加載到內存.

常見兩種類型的文件 : 文本文件二進制文件
文本文件 : 可以只用文本編輯軟件查看的 ,如Python源程序 , 本質上還是二進制文件
二進制文件 : 保存的內容不是給人直接看的,而是提供給其他軟件使用的.例如: 圖片文件 音頻文件 視屏文件,等不能直接用文本編輯器查看,要有相應的應用軟件.

2. 文件的基本操作

在計算機中操作文件的固定套路:
1.打開文件
2.讀寫文件:讀-將文件內容加載到內存.寫-將內存內容寫到文件
3.關閉文件

在Python中 常用的操作文件的1個函數,3個方法.

名稱類型說明
f.open()函數打開文件,并返回文件操作對象(文件句柄)
f.read()方法將文件內容讀到內存
f.write()方法將內存內容寫入文件
f.close()方法關閉文件,不關閉會占用系統可打開文件句柄數
open函數打開文件,并返回文件操作對象,后面的三個方法通過 文件對象 來調用.

文件句柄的其他方法

方法說明
f.flush()刷新輸出緩存
f.read([count])指定讀出count個字節的文件內容
f.readline()讀出一行信息
f.readlines()讀出所有行信息
f.seek(offset[,where])從where開始移動文件指針offset個單位,where=0文件開始處,1當前位置,2文件結尾
f.tell()獲得文件指針的位置
f.writelines(list)把list中的字符串一行一行寫入文件,連續寫入文件,沒有換行

3. 讀取文件open()

open函數 的第一個參數是 要打開的文件名(要帶擴展名). 如果文件存在,返回文件操作對象,如果文件不存在,會拋出異常.
read方法可以一次性 讀入并返回文件的所有內容
如果忘記關閉文件,會造成資源浪費,和后續操作困難所以打開之后,應該寫關閉語句,然后再去寫讀寫操作語句

# 1.打開文件
file=open("test.txt")# 2.讀取文件內容
text=file.read()
print(text)# 3.關閉文件,如果忘記關閉文件,會造成資源浪費,和后續操作困難所以打開之后,應該寫關閉語句,然后再去寫讀寫操作語句
file.close()

3.1 文件指針: 標記從哪一個位置開始讀取數據.

第一次打開文件時,文件直至會指向 文件的開始位置.
執行read方法后,文件指針會指向 讀取內容的末尾

注意:如果執行了一次read方法,讀取了所有內容,再次調用 read方法時,不能夠讀取文件內容了. 因為第一次讀取后,文件指針移動到了文件末尾.

# 1.打開文件
file=open("test.txt")# 2.讀取文件內容
text=file.read()
print(text)
print(len(text))print("-"*50)
text=file.read()
print(text)
print(len(text))# 3.關閉文件,如果忘記關閉文件,會造成資源浪費,和后續操作困難所以打開之后,應該寫關閉語句,然后再去寫讀寫操作語句
file.close()

輸出:

hello python
hallo19
--------------------------------------------------0

實際上并沒有說如何解決這個問題,或者進一步操作

3.2 文件的打開方式mode

file=open(“文件名.擴展名”,“打開方式”)

打開文件的方式:open 函數需要傳遞的第二個參數.如果不指定打開方式,默認以只讀方式 打開,并返回文件對象

打開方式說明
r只讀方式打開,文件指針在文件頭
w只寫方式打開,如果文件存在會覆蓋, 如果文件不存在創建新的文件
a(append)追加方式打開,文件指針在文件尾. 如果文件不存在創建新的文件
r+讀寫方式打開,文件指針在文件頭
w+讀寫方式打開,如果文件存在會覆蓋, 如果文件不存在創建新的文件
a+讀寫方式打開,文件指針在文件尾. 如果文件不存在創建新的文件
讀寫方式打開,頻繁操作文件指針,會影響文件讀寫效率.開發時,更多會以只讀 或者只寫 的方式來操作文件.

3.3 文件按行讀取

3.3.1 readline()

read 方法會把文件的所有內容都讀入到內存,如果文件太大,會使得內存占用率非常高.可以改用逐行讀取的方法.readline()方法可以一次讀取一行內容,方法執行后會把文件指針移動到下一行.
代碼示例:

file=open("test.txt")
while True:text=file.readline()print(text)# 判斷是否讀到內容if  not text:breakfile.close()

3.3.2 readlines()

data = []
data1 = []
fr = open("readline_test.txt")
for line in fr.readlines():      # 也是全部讀取,吃內存line = line.strip()          # 去掉字符串開頭或者結尾的空白符,包括換行符data_line = line.split(",")  # 使用","分割數據并返回一個列表data_line1 = list(map(int, line.split(",")))data.append(data_line)data1.append(data_line1)print(data)
print(data1)
fr.close()

read(size)當size不指定時,會將文件全部內容讀取

readline()一次只讀取一行即遇到‘\n’返回

readlines()讀取整個文件,并返回列表,一行為一個元素

4.文件輸出f.write(),print()

f = open("outpu.txt", "w")  # 沒有文件的話會新建一個
data = [['1', '2'], ['3', '4']]
line1 = ','.join(data[0])
f.write(line1 + '\n')
line2 = ','.join(data[1])
f.write(line2 + '\n')# print 把原本輸出到shell 的內容改輸到文件中
data = [[1, 2], [3, 4]]
for line in data:print(str(line[0]) + ',' + str(line[1]), file=f)

output.txt文件的內容

1,2
3,4
1,2
3,4

5.文件復制

5.1 小文件復制(搬家)

打開兩個文件-讀取原文件內容-寫入目標文件-關閉兩個文件。

打開文件:原文件默認以只讀的方式打開,目標文件以只寫"w"的方式打開,如果沒有目標文件,會新建一個目標文件。

代碼實例:

# 1.打開文件
file_read=open("readme.txt")
file_write=open("readme_copy.txt","w")
# 2.讀取操作
text=file_read.read()
file_write.write(text)
# 3.關閉
file_read.close()
file_write.close()

5.2 大文件復制(搬家)

一次性讀取會給內存造成巨大的壓力,可以使用按行讀取與寫入來實現這個功能。

# 1.打開文件
file_read=open("readme.txt")
file_write=open("readme_copy.txt","a")# 2.讀取操作,按行操作
while True:text=file_read.readline()if not text:breakfile_write.write(text)  # 從頭開始寫是文件指針的問題,設定在本頁的結尾打開,如一追加的方式加原文件的內容到新文件。# 3.關閉
file_read.close()
file_write.close()

5.3 shutil.copy()

import shutil
shutil.copy(文件1,文件2)

對文件1的內容和權限都進行copy。

5.4 shutil.rmtree()

刪除一個文件夾(如果文件夾里面有文件也會一起被刪掉)比較6.3中的刪除。

shutil.rmtree(’./cyy_test/subtest2’)

6.os 模塊

文件/目錄的常用管理操作
終端或者文件瀏覽器中可以執行的常規操作。例如:創建,重命名,刪除,改變路徑,查看目錄內容等。通過Python實現上述功能,需要導入os模塊。

6.1 改變工作目錄os.chdir()

使用腳本運行,默認的工作目錄為腳本所在的目錄中。可以使用chdir 改變工作目錄

import os
print(os.getcwd())
# linux 命令行使用pwd來輸出當前路徑
os.chdir("/Users/chenyingying")
print(os.getcwd())

輸出

/Users/chenyingying/PycharmProjects/DataMining_python
/Users/chenyingying

6.2 文件重命名os.rename()

os.rename(源文件名.擴展名,目標文件名.擴展名)

6.3 刪除文件os.remove()

os.remove(文件名.擴展名)

demo:刪除文件而保留目錄結構

import os
g=os.walk('/home/abc/Desktop/cyy_test')
for path,dir,files in g:  #路徑path 文件夾中的文件名files和文件夾名dir(都是list)print(path,dir,files)while files!=[]:for file in files:print(file)os.remove(os.path.join(path,file))files.remove(file)
print('end')

由頂至下的遍歷所有文件夾
在這里插入圖片描述

6.4 刪除空路徑os.removedirs()

刪除一個空文件夾,如果文件夾里有文件,或者文件夾是刪除不成功的。

os.removedirs(’./cyy_test/subtest123’)

刪除一個非空路徑(如果文件夾里面有文件也會一起被刪掉)

shutil.rmtree(’./cyy_test/subtest2’)

6.5 目錄列表os.listdir()

os.listdir(目錄名)
os.listdir(“.”) # 查看當前目錄的目錄列表

6.6 創建目錄os.mkdir()

os.mkdir(“目錄名”)

6.7 刪除目錄os.rmdir()

os.rmdir(”目錄名“)

6.8 判斷某個目錄是否存在,如果不在,創建這個目錄

import os
log_path = os.getcwd() + '/Logs/' #當前文件夾下的Logs文件夾if not os.path.exists(log_path) :  #判斷文件夾或文件os.makedirs(log_path)  #創建

參考資料:https://blog.csdn.net/xielifu/article/details/81013536

6.9 os.path.split(“xxx/xx/xxxx”)

將路徑分割出來,一次分割一個級別,每次分割得到兩個元素的tuple.

>>> import os 
>>> a=os.getcwd()
>>> a
'/home/pp/Desktop/testsplit/aaa/bbb'>>> a=os.getcwd()+"/1.txt"
>>> a
'/home/pp/Desktop/testsplit/aaa/bbb/1.txt'>>> b=os.path.split(a)
>>> b
('/home/pp/Desktop/testsplit/aaa/bbb', '1.txt')>>> c=os.path.split(b[0])
>>> c
('/home/pp/Desktop/testsplit/aaa', 'bbb')

6.10 os.path.isdir()

目錄名:要查看的目錄的名字。確定目錄列表中的字符串為一個目錄,而不是一個文件。返回的True或者False。

os.path.isdir(“xxx”)

先判斷路徑是否存在,不存在就創建該路徑

if not os.path.isdir(tarDir): os.makedirs(tarDir)

7.CSV文件

excel 格式的數據,將文件存成csv。以逗號作為文件分割符號。

f=open(‘data.csv’)
import pandas
data = pandas.read_csv()

8.JSON文件

保存字典格式的數據,將文件存成JSON 的格式。借助json模塊實現序列化和反序列化
序列化:字典格式-》字符串 json.jumps()
反序列化:字符串-》字典格式 json.loads()
不帶s的 json.jump()保存json文件,json.load()導入json文件

import json
x = {"height": 176,"weight": 60}
print("原x", x)
y = json.dumps(x)  # 轉化為字符串
print("序列化x", y)
x = json.loads(y)
print("反序列化x", x)f = open("json_test.json", 'w')
json.dump(x, f)
f.close()f = open("json_test.json", 'r')
print("從文件讀取到的json", json.load(f))

輸出

原x {'height': 176, 'weight': 60}
序列化x {"height": 176, "weight": 60}      # 三者的區別并不大
反序列化x {'height': 176, 'weight': 60}
從文件讀取到的json {'height': 176, 'weight': 60}

9.文本文件的編碼方式

文本文件存儲的內容是基于字符編碼的文件,常見的編碼有ASCIIUNICODE編碼。
Python2.x默認使用ASCII 編碼
Python3.x 默認使用UTF-8編碼

Ascii編碼:計算機中只有25個ASCII 字符,一個ASCII在內存中占一個字節(8位,256種組合方式)
UTF-8編碼:使用1-6個字節來表示一個字符,涵蓋了地球上幾乎所有地區的文字。大多數漢字會使用三個字節表示。UTF-8 是UNICODE編碼的一種編碼格式。

10.在Python2.x中使用中文

希望Python2.x 解釋器以UTF-8的方式解析文件,需要在Python2.x的開頭使用一下代碼,解釋器會以UTF-8編碼來處理Python文件.
官方推薦:

# *-* coding=utf-8 *-*

也可以寫:

# coding:utf8

在Python2.x中,帶有中文與英文混合的字符串需要在字符串的開頭寫一個u,來告訴編譯器這是一個utf8編碼的字符串.

a=u"hello 世界"

11.eval()

eval 函數會將字符串當成 有效表達式 來 求值 , 并返回計算結果.

簡單案例:計算器.要求用戶輸入一個 加減乘除混合運算,程序返回一個計算結果

input_str=input("請輸入算術題")
print(eval(input_str))# 輸入:(1+3)*5
# 輸出:15 完全不需要解析表達式中的內容,自動轉換計算. 

注意事項:
在開發時,千萬不要使用eval()直接轉換**input()**的結果
在控制臺上輸入以下命令,會直接執行任何的終端命令

import(“os”).system(“ls”)

import os
print(os.path.exists("cyy_test*"))        # 不能使用通配符
print(os.path.exists("cyy_test1.py"))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445115.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IOCP的程序

C代碼 #include <winsock2.h> #include <mswsock.h> #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include "vld.h" #pragma message("automatic link to ws2_32.lib and…

PaperNotes(3)-圖像分割-RCNN-FCN-Boxsup

圖像分割算法對比小結1.{基本概念}2.{R-CNN}2.1R-CNN 網絡結構選擇性搜索算法為什么選擇SVM作分類器邊框回歸2.2{R-CNN 訓練}2.3{R-CNN實驗結果}2.4{R-CNN語義分割}2.5{補充材料}2.5.1{R-CNN建議區域放縮}2.5.2{IOU閾值設置不一樣的原因}2.5.3{Bounding-box回歸修正}2.6{R-CNN存…

Python模塊(3)--PIL 簡易使用教程

PIL模塊-用與記1.圖片導入Image.open()2.圖像顯示.show()4.查看圖片屬性.format,.size,.mode3.圖像格式轉換.convert()4.圖像模式“L”&#xff0c;“RGB”,"CYMK"5. 圖片旋轉.rotate()旋轉方式1&#xff1a;旋轉不擴展旋轉方式2&#xff1a;旋轉擴展旋轉方式3&#…

日志級別 debug info warn eirror fatal

日志級別 debug info warn eirror fatal 軟件中總免不了要使用諸如 Log4net, Log4j, Tracer 等東東來寫日志&#xff0c;不管用什么&#xff0c;這些東東大多是大同小異的&#xff0c;一般都提供了這樣5個日志級別&#xff1a; Debug Info Warn Error Fatal一個等級比一個高&…

輸入輸出系統

I/O設備&#xff1a;輸入輸出和存儲功能的設備 I/O設備的分類 按傳輸的速度&#xff1a; 低速設備&#xff08;如鍵盤、鼠標、語音輸入輸出設備&#xff09; 中速設備&#xff08;如行式打印機、激光打印機等&#xff09; 高速設備&#xff08;如磁帶機、磁盤機、光盤機等&…

vue2源碼解析---v-model雙向數據綁定

什么是v-model v-model 是 Vue 中的一個指令&#xff0c;用于實現表單元素與 Vue 實例中數據的雙向綁定。這意味著當表單元素的值發生變化時&#xff0c;Vue 實例中的數據也會隨之更新 工作原理 生成ast樹 本質上是語法糖 結合了v-bind和v-on兩個指令 示例代碼 new Vue({e…

php收集的精典代碼

1. οncοntextmenu"window.event.return&#xff06;#118aluefalse" 將徹底屏蔽鼠標右鍵 <table border οncοntextmenureturn(false)><td>no</table> 可用于Table 2. <body onselectstart"return false"> 取消選取、防止復制…

python外卷(7)--glob

glob模塊1.glob.glob()2.對比os.listdir()glob是python自帶的一個操作文件的模塊&#xff0c;可用于查找 指定路徑 中 匹配的 文件。1.glob.glob() 下面是一個測試文件路徑&#xff1a; (base) pppp-System-Product-Name:~/Desktop/test_glob$ tree . ├── a │ ├── 1…

Sublime Text 2配置強大的IDE開發環境,運行java

Sublime Text 2是我無意中發現的、據說十分強大的、便捷的編輯器&#xff0c;許多程序員都投入到Sublime Text 2的懷抱中。 1 配置java開發環境的方法如下&#xff1a; 在jdk安裝目錄下的bin文件夾下新建一個bat格式的文件&#xff0c;文件命為javacexec.bat。 如果是在Wind…

thinkphp的快捷方法實例化對象

D、F、S、C、L、A、I 他們都在functions.php這個文件家 下面我分別說明一下他們的功能 D&#xff08;&#xff09; 加載Model類 M&#xff08;&#xff09; 加載Model類 A&#xff08;&#xff09; 加載Action類 L&#xff08;&#xff09; 獲取語言定義 C&#xff08;&#xf…

Python外卷(8)--pdist, squareform

pdist, squareform1.pdist, squareform使用例子2.通過矩陣的四則運算實現上述pdist, squareformscipy.spatial.distance 距離計算庫中有兩個函數&#xff1a;pdist, squareform&#xff0c;用于計算樣本對之間的歐式距離&#xff0c;并且將樣本間距離用方陣表示出來。&#xff…

模擬進程調度

功能 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h>#define ElemType PCB #define Status int #define OK 1 #define ERROR 0 #define TimeSlice 1 #define Infinity 10 //INT_MAX#define NAME_M…

gdb調試多進程和多線程命令

1. 默認設置下&#xff0c;在調試多進程程序時GDB只會調試主進程。但是GDB&#xff08;>V7.0&#xff09;支持多進程的 分別以及同時 調試&#xff0c;換句話說&#xff0c;GDB可以同時調試多個程序。只需要設置follow-fork-mode(默認值&#xff1a;parent)和detach-on-fork…

python外卷(10)--取整

"取整"那些事1.python 內置函數1.1int()--向下取整1.2round()--四舍五入2.math模塊取整函數2.1 math.floor()--向下取整2.2 math.ceil()--向上取整2.3 math.modf()--分別取小數部分和整數部分3.numpy模塊取整函數3.1 numpy.floor()--向下取整3.2 numpy.ceil()--向上取…

模擬銀行家算法

介紹 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h>#define ElemType PCB #define Status int #define true 1 #define false 0 #define OK 1 #define ERROR 0 #define RESOURCE_NUM …

Lua 與 C混合編程 .

本文通過程序實例說明C調用lua腳本和lua調用C的方法: 先建立一個 test.c文件: #include <stdio.h> #include <stdlib.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h" #pragma comment(lib, "lua5.1.lib&qu…

模擬固定分區分配

介紹 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h> #define LIST_INIT_SIZE 10 #define LISTINCREMENT 2 #define true 1 #define false 0 #define PCBType PCB #define Status int…

Linux下的lua和boost c++的搭建和安裝

先下載lua &#xff0c;boost c http://www.lua.org/versions.html#5.2 http://www.boost.org/ http://sourceforge.net/projects/luabind/ 1. 安裝lua [rootlocalhost ~]#tar zxvf lua-5.1.2.tar.gz -C /usr/local [rootlocalhost ~]# cd /usr/local/ [rootlocalhost lo…

模擬基本分頁存儲

介紹 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h>#define LIST_INIT_SIZE 10 #define LISTINCREMENT 2 #define true 1 #define false 0 #define PCBType PC…

常用正則表達式和shell命令列表

取當前目錄下普通文件的后綴名列表&#xff1a; ls -l | awk /^-/{print $NF} |awk -F. {print $NF}|awk !/^$/ 匹配0和正整數的正則表達式&#xff08;除0以外&#xff0c;其它數字不能以0開頭&#xff09;&#xff1a; (^0$)|(^[0-9]\d*$) 匹配中文字符的正則表達式&#xff…