【问题标题】:python3 find information from textfilepython3从文本文件中查找信息
【发布时间】:2018-06-14 00:25:45
【问题描述】:

在我编写的一个程序中,我将每天 BTC 的平均价格保存到一个 .txt 文件中,格式如下:

Date,Price
"Jun 05, 2018",7567.330
"Jun 04, 2018",7618.500
"Jun 03, 2018",7676.170
"Jun 02, 2018",7590.080
"Jun 01, 2018",7521.070
"May 31, 2018",7450.160
"May 30, 2018",7438.120
...

在我的代码中,我有一个日期列表,我必须将列表中的日期与文本文件中的日期相匹配,并找到当天的平均 BTC 价格。我打算将所有日期和价格分别保存到一个列表中,分别称为“coin_dates”和“coin_prices”。

我尝试在通常如何打开 json 字典之后对我的代码进行建模,不同之处在于我拿走了“json.load(f)”:

def initial_price(df):
    with open(df, "r") as f:
        coin_dates = [d["Date"] for d in f]
        coin_prices = [d["Price"] for d in f]

initial_price("btc.txt")

但我收到了这个错误:

Traceback (most recent call last):
   File "getICOdate.py", line 158, in <module>
     initial_price("btc.txt")
   File "getICOdate.py", line 155, in initial_price
     coin_dates = [d["Date"] for d in f]
   File "getICOdate.py", line 155, in <listcomp>
     coin_dates = [d["Date"] for d in f]
TypeError: string indices must be integers

我想打开一个 txt 文件并将日期和价格保存到两个单独的列表中,但我不知道如何处理它

【问题讨论】:

    标签: python-3.x pandas text-files


    【解决方案1】:

    首先,您应该考虑使用您的第一个程序(或程序的第一部分)来制作纯文本文件(看起来像 csv)并重写它以制作JSON 或腌制的 python 对象。

    1- 将 JSON 转储到文件中: 如果您将字典转换为 JSON,您可以简单地使用 JSON python library 执行类似的操作。

    import json
    with open('data.txt', 'w') as outfile:
        json.dump(data, outfile)
    

    JSON 会很好地工作,尤其是当其他应用程序正在读取它时(相同的语言或不同的语言)。

    2-Python Pickling: 如果它的 python 并且只有 python,那么酸洗也很好。

    with open(fileName + '.pkl', 'wb') as f:
            pickle.dump(object_to_store, f, pickle.HIGHEST_PROTOCOL)
    

    总之,不要用你已经制作的纯文本文件让自己变得更难。生成易于加载和转出的东西。 JSON 在这一点上实际上是行业标准,在任何平台上使用都超级方便!如果您有具体问题,请告诉我。

    【讨论】:

    • 所以我尝试按照您告诉我的方式将我的数据保存到 .json 文件中,并且新文件的格式与我的 .txt 格式完全相同,只是它有一个索引部分。你知道我如何将它保存在 .json 中,所以它看起来像这样: [{"date" : "Jun 05, 2018", "price" : 7567.33}, {"date": "Jun 04, 2018", “价格”:7618.50}]
    • 你必须给我更多的信息。你的代码是什么样的(在问题中更新这个)?你用过 json.dump() 吗?您是否使用 json.loads() 重新加载数据?
    • 查看此 SO 链接以获取示例:stackoverflow.com/questions/26745519/…
    • @j.doe- 您应该请求更多信息或将答案标记为正确
    【解决方案2】:

    您是否尝试打印d 以查看其中包含的内容?您会注意到它只是一个代表文件中一行的字符串。您假设 python 自动为您将其解析为一个数组,甚至将键与 CSV 文件中的标题相匹配。

    您必须首先解析您的字符串,或者更好的是,使用已经为您解析的库。这是一个熊猫的例子:

    import pandas as pd
    
    df = pd.read_csv('btc.txt')
    df[df["Date"] == "Jun 05, 2018"]["Price"] # 7567.330
    

    【讨论】:

    • 虽然当我打印出第 4 行时,我用列表中的日期替换了 6 月 5 日,但我得到了这个:“名称:价格,dtype:float64 301 3381.43”你知道我能做什么吗?只得到最后一个数字?
    • 它会打印出一堆我不需要的其他信息
    • 试试df[df["Date"] == "Jun 05, 2018"]["Price"].iloc[0]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2022-01-04
    • 2016-01-03
    • 2023-03-14
    • 1970-01-01
    • 2015-08-25
    相关资源
    最近更新 更多