2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Table des matières
paramètres de méthode de la bibliothèque csv
Opération de lecture de données de ligne ou de colonne spécifiée dans le fichier
lignes de lecture du fichier txt, méthodes de lecture
écriture du fichier txt, lignes d'écriture
Union lecture-écriture (modifier et insérer des données)
Lors de la lecture et de l'écriture de fichiers CSV, vous devez généralement gérer des problèmes tels que le chemin du fichier, le mode d'ouverture, l'encodage des caractères, etc. Le paramètre newline='' est généralement utilisé lors de la lecture et de l'écriture de fichiers csv pour garantir que la lecture et l'écriture du fichier ne seront pas affectées par le caractère de nouvelle ligne du système Windows. Les fichiers txt et les fichiers csv prennent en charge la conversion mutuelle, de sorte que la lecture et l'écriture des fichiers txt sont pleinement applicables aux fichiers csv.
paramètre | valeur par défaut | décrire |
délimiteur | , | Il fait référence aux caractères utilisés pour séparer les valeurs (ou champs) dans un fichier CSV. |
ignorer l'espace initial | FAUX | Il contrôle la manière dont les espaces suivant les délimiteurs sont interprétés. Si True, les espaces initiaux seront supprimés. |
terminateur de ligne | rn | Il fait référence à la séquence de caractères utilisée pour terminer une ligne. |
citationchar | " | Il fait référence à une chaîne unique qui sera utilisée pour référencer la valeur si des caractères spéciaux (tels que des délimiteurs) apparaissent dans le champ. Par exemple, "0,0" contient ",Dans le cas de ", vous pouvez utiliser quotechar=""" pour traiter les données dans "" dans leur ensemble. Si vous utilisez '0,0', vous pouvez utiliser quotechar="'". |
citation | csv.QUOTE_NONE | Contrôle quand les citations sont générées par l'auteur ou reconnues par le lecteur (voir ci-dessus pour d'autres options). |
caractère d'échappement | Aucun | Lorsque quoted est défini sur guillemet, il s'agit d'une chaîne d'un caractère utilisée pour échapper au délimiteur. |
double citation | VRAI | Contrôle le traitement des guillemets dans les champs.quandVrai Lors de la lecture, deux guillemets consécutifs sont interprétés comme un seul, tandis qu'à l'écriture, chaque caractère de guillemet incorporé dans les données est écrit sous forme de deux guillemets. Par défaut, les guillemets doubles sont définis sur True. Par conséquent, deux guillemets doubles consécutifs sont interprétés comme un seul lors de la lecture. Si doublequote est défini sur False, des guillemets doubles consécutifs apparaîtront dans la sortie. |
- import csv
-
- with open(file_name, 'r', encoding='utf-8-sig') as f:
- reader = csv.reader(f) # 创建csv阅读器对象,读取所有有效数据,返回结果为一个迭代器类对象
- for data in reader: # 遍历每一行的数据
- print(data)
encoding peut spécifier le format d'encodage comme utf-8-sig, qui peut traiter automatiquement les caractères de la nomenclature et éliminer l'apparition de ufeff.
- with open(file_name, 'r', encoding='utf-8-sig') as f:
- reader = csv.reader(f)
- list_csv = list(reader)
- for i in range(len(list_csv)-5,len(list_csv)): # 如读取后5行数据
- print(list_csv[i])
- print(list_csv[i][:3]) # 读取指定列数据
Utilisez les méthodes de lecture readlines() et read() des fichiers txt, et il y a des nouvelles lignes dans les données lues qui doivent être traitées.Pas besoin d'importer la bibliothèque csv
- with open(file_name, 'r', encoding='utf-8-sig') as f:
-
- reader_lines = f.readlines() # 读取所有行放在一个列表中
- for da in reader_lines: # 也可以使用range方法读取指定行的数据,读取结果中有换行符需要处理
- print(da.replace('n',''))
-
- reader = f.read()
- print(reader)
Lisez les données sous la forme d'un dictionnaire et les données imprimées se présentent sous la forme de paires clé-valeur de dictionnaire.
- with open(file_name,'r', encoding='utf-8-sig',newline='') as f:
- reader =csv.DictReader(f)
- for r in reader:
- print(r)
Pas besoin d'importer la bibliothèque csv
Utilisez les lignes d'écriture et d'écriture du fichier txt pour écrire des données. Lors de son utilisation, la virgule anglaise dans le caractère est reconnue comme la tabulation horizontale et le caractère de nouvelle ligne est reconnu comme le caractère de tabulation vertical saisi pour le retour à la ligne. Si vous souhaitez insérer une ligne vide, utilisez un caractère de nouvelle ligne pour le paramètre data. Si vous souhaitez écrire une cellule vide, utilisez une virgule pour le paramètre data.
- with open(file_name, 'w', newline='') as f:
- f.write('测试写入数据操作n')
- f.write('n')
- f.writelines(["角色管理,测试测试", "账号管理n", "部门管理n"])
Lors de l'écriture de données, acceptez une variable qui peut être un objet traversable tel qu'une chaîne, une liste, un tuple, un ensemble, un dictionnaire, etc. [Les chaînes rempliront chaque caractère séparément dans les cellules, et les dictionnaires parcourront et écriront les clés]. writerow est utilisé pour écrire des données sur une seule ligne et writerows est utilisé pour écrire plusieurs lignes de données.
- with open(file_name, 'w', newline='') as f:
- ws = csv.writer(f) # 创建一个写入文件对象
- ws.writerow([]) # 列表内容为空,插入的是一个空行
- ws.writerow(["设备实时监控", "设备数据列表", "设备报警分析"]) # 列表数据
- ws.writerow(("角色管理", "账号管理", "部门管理")) # 元组数据
-
- write_data = ['贾史王薛',
- ['贾不假,白玉为堂金作马', '阿房宫,三百里,住不下金陵一个史', '东海缺少白玉床,龙王请来金陵王',
- '丰年好大雪,珍珠如土金如铁'], ('cao', 'xue', 'qin', 'shu'), {'曹', '雪', '芹', '书'},
- {'贾': '宝玉', '史': '湘云', '王': '熙凤', '薛': '宝钗'},
- {'贾': '宝玉', '史': '湘云', '王': '熙凤', '薛': '宝钗'}.values()]
- ws.writerows(write_data) # writerows写入多行数据
Lors de l'écriture des données, DictWriter doit déterminer si la clé se trouve dans les noms de champs en fonction de la clé du dictionnaire. Si elle n'existe pas, une erreur sera signalée. Si vous devez ajouter toutes les données du dictionnaire connues et inconnues, vous pouvez d'abord toutes les lire. les clés des données qui doivent être écrites, puis comparez-les avec l'en-tête du fichier d'origine. Comparez (lisez l'en-tête du fichier d'origine), ajoutez-le à la liste des en-têtes, puis écrivez les données.
- fieldnames = ['姓氏', '人物', '说明'] # 表头
- dictate = [{'姓氏': '贾', '人物': "宝玉"}, {'姓氏': '史', '人物': "湘云"}, {'姓氏': '王', '人物': "熙凤"},
- {'姓氏': '薛', '人物': "宝钗"}]
- with open(file_name, 'w', newline='') as f:
- write = csv.DictWriter(f, fieldnames=fieldnames, delimiter=',')
- write.writeheader() # 写入表头
- write.writerow({'姓氏': '贾', '人物': "宝玉"}) # 单行模式写入
- write.writerows(dictate) # 多行模式写入
Principe : lisez d'abord les données du fichier d'origine, transférez-les vers le stockage de liste, puis utilisez la méthode de liste pour ajouter, supprimer et d'autres opérations basées sur la liste obtenue, et enfin écrire les données de liste modifiées dans le fichier en utilisant l'écriture multiligne.
- # 第一步:读取数据
- with open(file_name, 'r+', newline='') as f:
- file_csv_data = list(csv.reader(f))
-
- # 第二步:操作数据
- # 插入数据
- file_csv_data.insert(2, '贾史王薛') # 在某行插入一行数据,如在第3行插入数据
- file_csv_data[2].insert(0, '红楼四大家族') # 在指定单元格插入数据,如在3行1列的单元格插入数据
-
- # 修改数据
- file_csv_data[2] = ['贾不假,白玉为堂金作马', '阿房宫,三百里,住不下金陵一个史', '东海缺少白玉床,龙王请来金陵王',
- '丰年好大雪,珍珠如土金如铁', ''] # 修改指定行一行数据
- file_csv_data[2][4] = '葫芦僧判葫芦案' # 修改某一单元格数据,如修改3行5列数据
-
- # 修改符合条件的数据数据
- # 修改符合要求的单元格数据:通过for循环遍历判断,例如修改单元格中包含1的数据,将1替换成一
- # for r_id, row in enumerate(file_csv_data): # 通过行号列号修改
- # for c_id, col in enumerate(row):
- # if '1' in col:
- # file_csv_data[r_id][c_id] = col.replace('1', '一')
-
- for row in file_csv_data: # 通过行数据及列号修改,比上面更方便
- for c_id, col in enumerate(row):
- if '1' in col:
- row[c_id] = col.replace('1', '一')
-
- # 第三步:写入报存数据
- with open(file_name, 'w', newline='') as f:
- write_file = csv.writer(f)
- write_file.writerows(file_csv_data)