【问题标题】:How to read a dynamic csv file?如何读取动态 csv 文件?
【发布时间】:2017-07-21 22:21:11
【问题描述】:

下面的函数读取一个 csv 文件并将其附加到一个列表中,然后我在另一个函数中使用该列表。

def get_csv_data(csv_path):
    """
    read test data from csv and return as list

    @type csv_path: string
    @param csv_path: some csv path string
    @return list
    """
    rows = []
    csv_data = open(str(csv_path), "r")
    content = csv.reader(csv_data)

    # skip header line
    next(content, None)

    # add rows to list
    for row in content:
       rows.append(row)

    return rows

我现在遇到的问题是 csv 是由另一个函数实时动态填充的。将csv读取到最后一个当前行然后再次读取它忽略先前读取的行的最佳方法是什么。需要明确的是,我的意思是当函数读取 csv 时,例如到第 8 行,然后用更多数据更新 csv,下一次运行如何从第 9 行开始?任何帮助和指针将不胜感激。

【问题讨论】:

  • 您可以跟踪到目前为止读取的行,并从那里开始每次调用 get_csv_data。 S
  • @jacoblaw 感谢您的建议,但我将如何实施呢?
  • 您是否可以控制更新文件的进程?
  • csv_data.tell() 将返回文件的当前位置。记住它,你可以csv_data.seek()回到它,从你离开的地方开始。
  • @ wwii,是的,我确实可以控制文件的更新

标签: python csv


【解决方案1】:

如果文件持续增长

您需要跟踪到目前为止已完全阅读的位置, 并且下次调用该函数时执行 seek, 跳到你离开的位置。

要实现这一点,您可以创建一个存储搜索位置的类, 以及从最后一个查找位置读取并更新它的函数。 或者,您可以保留当前函数,但使其为搜索位置提供额外的输入,并使其返回新的搜索位置作为额外的输出。

如果文件是流,则永远打开,永远无法完全读取

而不是将行读取到数组并返回数组, yield 到达时的行。

如果文件在新内容到达时被截断

这将是一个脆弱的设置, 因为你可能会错过数据, 在它被截断之前不阅读它。 所以这可能不值得认真考虑。

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    相关资源
    最近更新 更多