Python-Dateioperationen (txt + xls + json)

Einführung

Python-Dateioperationen sind ein wichtiger Bestandteil der Arbeit mit Dateien und Verzeichnissen. Mit Dateioperationen können Sie Dateien erstellen, öffnen, lesen, schreiben, ändern und löschen. Dies ist eine der häufigsten Aufgaben in der Python-Programmierung und nützlich für die Arbeit mit Daten, Konfigurationsdateien, Protokollierung und mehr.

Verwenden Sie die integrierten Bibliotheken von Python und Bibliotheken von Drittanbietern für Dateioperationen:
(1)TXT文件
(2)Excel文件
(3)JSON文件

1. Verwenden Sie with_open zum Lesen und Speichern: .txt + .bin (Binärtext)

1.1. Detaillierte Erläuterung der with open-Anweisung

函数功能:with open语句是Python中一种处理文件的方式。通过使用with语句,可以确保在退出代码块时文件会被正确关闭,避免资源泄漏。
函数说明:with open(file_path, mode) as file:
输入参数:1)file_path:要打开的文件路径。2)mode:文件模式,指定文件在打开时的操作。可以是以下之一:
				"r":	读取模式。用于打开文件并读取内容。
				"w":	写入模式。用于打开文件并写入内容。
								 备注:如果文件已存在,会清空文件内容。如果文件不存在,则创建一个新文件。
				"a":	追加模式。用于打开文件并在文件末尾追加内容。
								 备注:如果文件不存在,则创建一个新文件。
				"rb":	以二进制读取模式打开文件。
				"wb":	以二进制写入模式打开文件。
				"ab":	以二进制追加模式打开文件。

1.1. Projekt tatsächlicher Kampf

with open('file.txt', 'r') as file:
    content = file.read()  # 读取文本文件
# 文件在这里会自动关闭


with open('file.txt', 'w') as file:
    file.write('Hello, World!')  # 写入文本文件
# 文件在这里会自动关闭
with open('binary_file.bin', 'rb') as file:
    binary_data = file.read()  # 读取二进制文件
# 文件在这里会自动关闭


with open('binary_file.bin', 'wb') as file:
    file.write(b'\x01\x02\x03')  # 写入二进制文件
# 文件在这里会自动关闭

2. Verwenden Sie Pandas zum Lesen und Speichern: .xls + .xlsx

2.1. Einführung in Pandas

pandas (Python Data Analysis Library) ist eine leistungsstarke Open-Source-Datenanalyse- und -verarbeitungsbibliothek, die leistungsstarke, benutzerfreundliche Datenstrukturen und Datenanalysetools für die Programmiersprache Python bereitstellt. Pandas wird häufig mit Bibliotheken wie NumPy und Matplotlib zur Datenbereinigung, -transformation, -analyse und -visualisierung verwendet.

  • Datenstruktur: (1)Series: ist ein beschriftetes eindimensionales Array, das jeden Datentyp aufnehmen kann. Es besteht aus einer Reihe von Daten und damit verbundenen Etiketten (Indizes). (2)DataFrame: Es handelt sich um eine zweidimensionale tabellarische Datenstruktur, die mehrere Datentypen aufnehmen kann. Es ähnelt einer Tabellenkalkulation oder einer SQL-Tabelle mit Zeilen und Spalten.
  • Datenimport und -export: Pandas kann problemlos eine Vielzahl von Datenformaten importieren und exportieren, darunter CSV, Excel, SQL-Datenbanken, JSON, HTML, Parquet, HDF5 und mehr. Beispiel:pd.read_csv(), pd.read_excel(), df.to_csv(), df.to_excel(), usw.
  • Datenbereinigung und -verarbeitung: Mit Pandas können Sie doppelte Werte entfernen, fehlende Werte verarbeiten, Daten filtern, Daten zusammenführen und verbinden sowie Daten sortieren und gruppieren. Beispiel:df.drop_duplicates(), df.dropna(), df.fillna(), df.groupby(), df.pivot_table(), usw.
  • Datenindizierung und -auswahl: Sie können Beschriftungen oder Positionen verwenden, um bestimmte Datenzeilen oder -spalten auszuwählen. Pandas bietet eine Vielzahl von Indexierungs- und Slicing-Methoden. Beispiel: df['列名'], df.loc[], df.iloc[], df.loc[] usw.
  • Datenberechnung und -aggregation: Pandas bietet umfangreiche Datenberechnungs- und Aggregationsfunktionen, einschließlich Summe, Durchschnitt, Anzahl, Maximalwert, Minimalwert, Quantil usw. Beispiel:df.mean(), df.sum(), df.max(), df.min(), df.describe(), usw.
  • Datenvisualisierung: Pandas kann in Verbindung mit anderen Python-Visualisierungsbibliotheken wie Matplotlib und Seaborn verwendet werden, um Daten grafisch darzustellen. Beispiel:df.plot(), df.hist(), df.boxplot(), sns.pairplot(), usw.
  • Zeitreihenanalyse: Pandas bietet eine gute Unterstützung für Zeitreihendaten und kann problemlos Datums- und Uhrzeitdaten verarbeiten. Beispiel:pd.to_datetime(), df.resample(), df.rolling(), usw.
  • Hochleistung: Pandas ist für die Verarbeitung großer Datenmengen optimiert und kann große Datenmengen effizient verarbeiten.

2.2. Umgebungskonfiguration

  • pip install pandas
  • pip install xlrd
  • pip install openpyxl

(1) Die Funktion von pandasread_excel() ist zur Implementierung auf die xlrd-Bibliothek angewiesen读取.xls格式的Excel文件, daher muss die xlrd-Bibliothek installiert und importiert werden.
(2) Die to_excel()-Funktion von Pandas basiert auf der openpyxl-Bibliothek, um das DataFrame-Objekt zu implementieren 保存.xlsx格式的Excel文件, daher benötigt die openpyxl-Bibliothek installiert und importiert werden. .

  • xlrdEs handelt sich um eine Bibliothek zum Lesen von Excel-Dateien. Sie bietet viele Funktionen zum Verarbeiten von Excel-Dateien, darunter das Lesen von Zellinhalten, das Verarbeiten von Datumsangaben, Zahlen und Text usw. Verwenden Sie die Funktion xlrd.open_workbook(), um eine Excel-Datei zu öffnen und Arbeitsmappen- und Arbeitsblattobjekte für den Zugriff auf Daten zu verwenden.
  • openpyxlist eine Bibliothek zum Lesen und Schreiben von Excel-Dateien, die mehr Flexibilität und Funktionalität bietet, einschließlich des Lesens und Änderns von Zellinhalten, Stilen, Diagrammen usw. Verwenden Sie die Funktion openpyxl.load_workbook(), um eine Excel-Datei zu öffnen und Arbeitsmappen- und Arbeitsblattobjekte für den Zugriff auf Daten zu verwenden.

2.3. Projekt tatsächlicher Kampf

import os
import pandas as pd

"""读取xls数据"""
excel_file_path = os.getcwd() + r'\rgb.xls'
# 使用 header 参数指定要跳过的行数,通常跳过第一行(表头),默认 header=0
df = pd.read_excel(excel_file_path, header=None)
# 提取第一列和第二列数据并转换为列表
gray_value = df.iloc[:, 0].tolist()  # 提取第一列数据并转换为列表
name_value = df.iloc[:, 1].tolist()  # 提取第二列数据并转换为列表
rgb_value = df.iloc[:, 2:5].values.tolist()  # 提取第三到四列数据并转换为列表(RGB)

"""数据保存到xls"""
data = [["nii", num, 1]]  # 创建一个包含单行数据的二维数组
df = pd.DataFrame(data, columns=["name", "num", "RGB"])
df.to_excel(self.output_excel_path, index=False, engine='openpyxl')
print(f'Data saved to {
      
      self.output_excel_path}')


"""
# 保存三维数组

import pandas as pd
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  			# 示例数组
df = pd.DataFrame(data, columns=["z", "y", "x"])
output_excel_path = "output.xlsx"  					# 替换为您想要保存的文件路径
df.to_excel(output_excel_path, index=False, engine='openpyxl')
print(f'Data saved to {output_excel_path}')
"""

"""在当前的excel数据中添加新数据"""
import pandas as pd
import os
# 检查Excel文件是否已存在
excel_path = folder_path + "/cell_counting/all.xlsx"
if os.path.exists(excel_path):
    df = pd.read_excel(excel_path)   # 如果文件存在,读取现有数据
else:
    df = pd.DataFrame()  # 如果文件不存在,创建一个空的数据框
new_data = {
    
    'target_gray': [target_gray], 'cell_num': [cell_num]}
new_df = pd.DataFrame(new_data)  # 添加新的数据到数据框
df = pd.concat([df, new_df], ignore_index=True)
df.to_excel(excel_path, index=False, engine='openpyxl')  # 将更新后的数据框写回Excel文件
print(f'Data has been successfully saved to: {
      
      excel_path}')

3. Verwenden Sie json.dump zum Lesen und Speichern von: .json

3.1, JSON-Format

JSON (JavaScript Object Notation) ist ein leichtes Textformat für die Datenspeicherung und den Datenaustausch. Ursprünglich von Douglas Crockford im Jahr 2001 vorgeschlagen, basiert es auf einer Teilmenge von JavaScript, hat sich jedoch zu einem von der Programmiersprache unabhängigen Datenformat entwickelt.

Hauptmerkmale von JSON:

  • Lesbarkeit: Verwenden Sie ein Schlüssel-Wert-Paar ähnlich wie dictionary oder map; " Art und Weise, Daten darzustellen.
  • Unterstützt mehrere Datenstrukturen: Einschließlich Zeichenfolge, Zahl, boolescher Wert, Array, Objekt (auch Wörterbuch oder Karte genannt) und Null. Diese Datentypen können verschachtelt und kombiniert werden, um komplexe Datenstrukturen darzustellen.
  • Unterstützen Sie plattformübergreifende Interaktion:JSON ist ein von der Programmiersprache unabhängiges Datenformat, das in verschiedenen Programmiersprachen analysiert und generiert werden kann. Dadurch eignet es sich ideal für den Datenaustausch zwischen verschiedenen Systemen und Anwendungen.
  • Leicht: Die Syntax von JSON ist sehr prägnant, ohne komplizierte Tags oder Syntax, wodurch weniger Bandbreite bei der Netzwerkübertragung beansprucht wird.
  • leicht zu analysieren: JSON-Daten können von Parsern in verschiedenen Programmiersprachen schnell in interne Datenstrukturen geparst werden, sodass Anwendungen JSON-Daten einfach bearbeiten können.
  • Unterstützen Sie das Hinzufügen von Kommentaren: Obwohl es in der JSON-Spezifikation keine offiziell unterstützte Syntax für Kommentare gibt, erlauben einige JSON-Parser die Einbindung von Kommentaren in die Daten, was für Dokumentations- und Konfigurationsdateien nützlich sein kann.
# 字符串、数字、布尔值、数组、对象
data = {
    
    
    "name": "John Doe",							
    "age": 30,
    "isStudent": False,
    "courses": ["Math", "Science", "History"],
    "address": {
    
    
        "street": "123 Main St",
        "city": "Anytown",
        "zipCode": "12345"
    }
}

3.2. Projekt tatsächlicher Kampf

  • Methode 1: Der Vorteil der Verwendung der with-Anweisung besteht darin, dass die Datei nach der Ausführung des Codeblocks automatisch geschlossen wird. Dadurch wird sichergestellt, dass die Datei nach der Verwendung ordnungsgemäß geschlossen wird und keine Ressourcenlecks entstehen. Am Ende des with-Anweisungsblocks wird die Datei automatisch geschlossen, ohne dass die Methode close() explizit aufgerufen werden muss.
import json

json_file_path = "/coordinates.json"
with open(json_file_path, 'w') as json_file:  # 打开json文件
    # 在这个代码块中,json_file处于打开状态
    data = {
    
    'Z_line': Z_line,
            'Y_line': Y_line,
            'X_line': X_line}
    json.dump(data, json_file, indent=4)  # 填充json文件

# 在这个代码块中,json_file会自动被关闭
  • Methode 2: Wenn Sie die Methode open() zum Öffnen der Datei verwenden, müssen Sie die Methode close() explizit aufrufen, um die Datei zu schließen, nachdem die Datei verwendet wurde. Wenn Sie vergessen, die Datei zu schließen, kann dies dazu führen, dass das Dateihandle ausläuft und Systemressourcen belegt.
import json

json_file_path = "/coordinates.json"
f = open(json_file_path, 'w')  # 打开json文件
data = {
    
    'Z_line': Z_line,
        'Y_line': Y_line,
        'X_line': X_line}
json.dump(data, f, indent=4)  # 填充json文件

f.close()  # 手动关闭文件,确保释放资源。

4. Öffnen Sie das Dialogfeld

Python selbst verfügt über keine integrierte Ordnerauswahlschnittstelle. Es ist jedoch möglich, Bibliotheken von Drittanbietern zu verwenden, um die Funktionalität zum Auswählen von Dateien oder Ordnern im Code zu implementieren. Eine häufig verwendete Bibliothek ist tkinter, eine der Standard-GUI-Bibliotheken von Python, die Funktionen zum Erstellen einfacher grafischer Benutzeroberflächen bietet.

  • Installation: tkinter ist eine der Standardbibliotheken von Python und in den meisten Python-Distributionen normalerweise vorinstalliert. Wenn tkinter in Ihrer Umgebung nicht installiert ist, müssen Sie es möglicherweise installieren. Auf den meisten Betriebssystemen kann tkinter installiert werden, indem der folgende Befehl über die Befehlszeile ausgeführt wird:pip install tkinter
  • Hinweis: Der Unterschied zwischen der Auswahl von Dateien und Ordnern besteht darin, dass bei einer davon filedialog.askopenfilename() und bei der anderen filedialog.askdirectory() aufgerufen wird.

(1) Öffnen Sie das Dateiauswahldialogfeld

Fügen Sie hier eine Bildbeschreibung ein

import tkinter as tk
from tkinter import filedialog
import os

root = tk.Tk()		# 创建根窗口
root.withdraw()  	# 隐藏根窗口
file_path = filedialog.askopenfilename()		# 打开文件选择对话框
print("Selected file path:", file_path)			# 打印所选文件的路径

file_name = os.path.basename(file_path)                         # 获取文件的名称+后缀
file_name_without_extension = os.path.splitext(file_name)[0]    # 获取文件的名称
file_directory = os.path.dirname(file_path)                     # 获取文件的目录

print("获取文件的名称+后缀:", file_name)
print("获取文件的名称:", file_name_without_extension)
print("获取文件的目录:", file_directory)

"""
Selected file path: D:/Anaconda/_conda.exe
获取文件的名称+后缀:_conda.exe
获取文件的名称:_conda
获取文件的目录:D:/Anaconda
"""

(2) Öffnen Sie das Dialogfeld zur Ordnerauswahl

Fügen Sie hier eine Bildbeschreibung ein

import tkinter as tk
from tkinter import filedialog

root = tk.Tk()		# 创建根窗口
root.withdraw()  	# 隐藏根窗口
folder_path = filedialog.askdirectory()			# 打开文件夹选择对话框
print("Selected folder path:", folder_path)		# 打印所选文件夹的路径

###########################################################################
import tifffile		# 用于打开.tif格式的图像
# 读取文件夹中的所有tif图像并将它们存储在列表中
image_list = []		# 新建一个空列表
for filename in sorted(os.listdir(folder_path)):				# 列举文件夹中的所有文件 + 排序后遍历。
    if filename.endswith('.tif'):								# 提取以.tif结尾的图像文件。
        image_path = os.path.join(folder_path, filename)		# 将文件名和文件夹路径连接起来,得到完整的图像文件路径image_path
        image = tifffile.imread(image_path)						# 加载tif图像
        image_list.append(image)								# 在列表末尾添加元素

import numpy as np
output_tif_path = "result.tif"
image_stack = np.stack(image_list, axis=0)				# 将图像列表转换为三维数组
labeled_image = image_stack.astype(np.uint8)            # 将数据类型转换为uint8
tifffile.imwrite(output_tif_path, labeled_image)        # 保存图像为TIFF并指定数据类型为uint8

(3)Bestimmen Sie, ob der Pfad/Ordner/die Datei existiert

import os

folder_path = os.getcwd() + "/image"
# (1)判断字符串是否存在
if folder_path != "":

    # (2)判断文件夹是否存在(不存在则新建)
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)
        print("文件夹不存在")

    # (3)判断文件是否存在
    image_path = folder_path + "/conda.exe"
    if os.path.exists(image_path):
        print("图像存在")

5. Statistikzeit

5.1, Berechnungslaufzeit

import time
start_time = time.time()  # 记录开始时间
# ...
end_time = time.time()  # 记录结束时间
runtime = end_time - start_time  # 计算运行时间
print(f"总运行时间: {
      
      runtime:.2f} 秒")

"""
import time
start_time = time.time()  # 记录开始时间

print(f"总运行时间: {time.time() - start_time:.2f} 秒")  # 打印运行时间
"""

5.2, Erhalten Sie die aktuelle Uhrzeit

import time
current_timestamp = time.time()
print("获取当前时间戳:", current_timestamp)
"""
#####################################################################
时间戳: 表示从某个特定时间点(通常是"Unix纪元",即1970年1月1日00:00:00 UTC)到特定日期时间的秒数,包括小数部分表示毫秒或微秒。
#####################################################################
获取当前时间戳: 1698040970.5602446 表示距离1970年1月1日00:00:00 UTC已经过去了大约 1698040970 秒和约 560 毫秒以及 2446 微秒。
"""

from datetime import datetime
print("获取当前日期和时间:", datetime.now())
print("只日期格式:", datetime.now().date())
print("只时间格式:", datetime.now().time())
print("自定义格式:", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
"""
获取当前日期和时间: 2023-10-23 14:02:50.560244 表示2023年10月23日下午14点2分50秒零点五百六十四微秒
#####################################################################
只日期格式: 2023-10-23
只时间格式: 14:02:50.560244
自定义格式: 2023-10-23 14:02:50
"""

おすすめ

転載: blog.csdn.net/shinuone/article/details/132538577