如何 update/change 文本文件中的值 python
How to update/change values in a text file in python
如何使用用户输入更改文本文件 values/items?例如,我将在我的文本文件中更新 RECOVERED(COVID 案例)的值。我不知道从哪里开始。
这是我的文本文件的内容
COUNTRY,CONFIRMED,ACTIVE,RECOVERED,SUSPECT,PROBABLE,DECEASED
COUNTRYA,4,2,2,2,0,0
COUNTRYB,2,0,2,0,0,0
COUNTRYC,2,0,0,3,0,2
COUNTRYD,2,1,1,3,0,0
无法像您在 post 中演示的那样可靠地 "in place" 更新 CSV 文件。通常,您只需覆盖该文件即可。
但是在内存中修改表格数据非常容易。我建议对其 DataFrame 数据结构使用 Pandas 库。
例如,如果要加载文件,将 D 国的确诊病例数更改为 10,然后重新保存文件,您的代码将如下所示:
import pandas as pd
data = pd.read_csv('data.csv', index_col='COUNTRY')
data.at['COUNTRYD', 'CONFIRMED'] = 10
data.to_csv('data.csv')
如果您想拥有更强大的应用程序,例如要处理 concurrent/threaded 更新或非常频繁的更新,您应该使用不同的文件格式。为此,我个人使用 SQLite 数据库,并使用标准库中的 sqlite3 包。
编辑-
如果不能使用Pandas,可以使用标准库中的csv package读写数据。我建议将数据存储在一个字典中。这是一个例子:
import csv
def read_data(filename):
data = {}
with open('data.csv') as fp:
reader = csv.DictReader(fp) # auto-detects field names
for row in reader:
key = row['COUNTRY']
value = {k: v for k, v in row.items() if k != 'COUNTRY'}
data[key] = value
return data
def write_data(data, filename, fieldnames):
with open('data.csv', 'w') as fp:
writer = csv.DictWriter(fp, fieldnames=fieldnames)
for key, value in data.items():
row = {'COUNTRY': key, **value}
row[''] = key
writer.writerow(row)
data = read_data('data.csv')
data['COUNTRYD']['CONFIRMED'] = 10
fieldnames = list(next(data.values()).keys()) # get the field names from the first element in the dataset
write_data(data, 'data.csv', fieldnames)
请仔细阅读示例。一如既往,不要复制和粘贴您不完全理解的代码。
如何使用用户输入更改文本文件 values/items?例如,我将在我的文本文件中更新 RECOVERED(COVID 案例)的值。我不知道从哪里开始。
这是我的文本文件的内容
COUNTRY,CONFIRMED,ACTIVE,RECOVERED,SUSPECT,PROBABLE,DECEASED
COUNTRYA,4,2,2,2,0,0
COUNTRYB,2,0,2,0,0,0
COUNTRYC,2,0,0,3,0,2
COUNTRYD,2,1,1,3,0,0
无法像您在 post 中演示的那样可靠地 "in place" 更新 CSV 文件。通常,您只需覆盖该文件即可。
但是在内存中修改表格数据非常容易。我建议对其 DataFrame 数据结构使用 Pandas 库。
例如,如果要加载文件,将 D 国的确诊病例数更改为 10,然后重新保存文件,您的代码将如下所示:
import pandas as pd
data = pd.read_csv('data.csv', index_col='COUNTRY')
data.at['COUNTRYD', 'CONFIRMED'] = 10
data.to_csv('data.csv')
如果您想拥有更强大的应用程序,例如要处理 concurrent/threaded 更新或非常频繁的更新,您应该使用不同的文件格式。为此,我个人使用 SQLite 数据库,并使用标准库中的 sqlite3 包。
编辑-
如果不能使用Pandas,可以使用标准库中的csv package读写数据。我建议将数据存储在一个字典中。这是一个例子:
import csv
def read_data(filename):
data = {}
with open('data.csv') as fp:
reader = csv.DictReader(fp) # auto-detects field names
for row in reader:
key = row['COUNTRY']
value = {k: v for k, v in row.items() if k != 'COUNTRY'}
data[key] = value
return data
def write_data(data, filename, fieldnames):
with open('data.csv', 'w') as fp:
writer = csv.DictWriter(fp, fieldnames=fieldnames)
for key, value in data.items():
row = {'COUNTRY': key, **value}
row[''] = key
writer.writerow(row)
data = read_data('data.csv')
data['COUNTRYD']['CONFIRMED'] = 10
fieldnames = list(next(data.values()).keys()) # get the field names from the first element in the dataset
write_data(data, 'data.csv', fieldnames)
请仔细阅读示例。一如既往,不要复制和粘贴您不完全理解的代码。