我尝试在对特定值进行网络报废后将唯一行传递给txt文件。所以txt文件涉及以下内容:
Current date Amount Gained 15/07/2017 660 16/07/2017 -200 17/07/2017 300
所以基本上我想做的是编写一个脚本,只允许我不想要任何重复的唯一行,因为值每天都在变化。因此,如果用户偶然在一天内运行脚本两次,我不希望在我的txt文件中出现重复的行,因为它会影响我的数据分析中的进一步计算。所以这是我目前的功能,我想知道我应该做些什么修改?
def Cost_Revenues_Difference():
nrevenue = revenue
ndifference = difference
dateoftoday = time.strftime('%d/%m/%Y')
Net_Result.append(nrevenue)
with open('Net_Result.txt', 'a') as ac:
for x in Net_Result:
ac.write('\n' + dateoftoday + ' ' + str(Net_Result))
Cost_Revenues_Difference()
答案 0 :(得分:0)
有很多方法可以做到这一点。下面介绍两种替代方法。
一种是将它们放在一个字符串中,键和值成对,并使用json库导入和导出数据(好处:非常常见的数据结构)。
import json
with open("test.json") as f:
data = json.loads(f.read())
data["18-05-17"] = 123
with open("test.json", "w") as f:
json.dump(data,f,indent=4)
Test.json
{
"18-05-17": 123,
"17-05-17": 123
}
作为字典,只能保存您不会有重复的唯一键。
另一个解决方案是将当前日期放在文件名中:
import datetime
import os
today = datetime.datetime.today().strftime("%y%m%d")
filedate = [i for i in os.listdir() if i.startswith("Net_result")][0]
# If today is different than the filedate continue
if today != os.path.splitext(filedate)[0].split("_")[-1]:
# code here
with open(filedate, "a") as f:
f.write('\n' + dateoftoday + ' ' + str(Net_Result))
# rename
os.rename(filedate,"Net_result_{}.csv".format(today))
你可以从一个带有昨天日期的文件(" Net_result_170716")开始,代码将检查文件结尾是否与今天(它是)不同并添加新值,重命名文件并保存。再次运行代码不会做任何事情(甚至不打开文件)。
答案 1 :(得分:0)
您可以在以下日期之前将文件的所有数据读入列表:
with open('Net_Result.txt') as f:
content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content]
然后检查您要添加的行是否在您的内容列表中不存在,如果没有,请将该行添加到文件中:
newLine = dateoftoday + ' ' + str(Net_Result);
if not newLine in content:
ac.write('\n' + newLine)
答案 2 :(得分:0)
如果文件可以加载到RAM并且具有示例行中给出的结构,则可以将数据作为python对象转储到.pkl
中。例如:
import pickle
data = {'15/07/2017': 660,
'16/07/2017': -200,
'17/07/2017': 300}
with open('/path/to/the/file.pkl', 'wb') as file:
pickle.dump(data, file)
pickle
文件对python对象友好,您可以利用字典对象的内置方法来避免冗余条目或进行更新。
对于更复杂的结构,请查看pandas.Dataframes
。如果您的程序使用python以外的语言,json
或xml
可能是更好的选择。