Python - 如何找到文件中的行位置,并围绕该行移动?

标签 python

我正在使用以下方法解析大型数据文件:

reader = csv.DictReader(open('Sourcefile.txt','rt'), delimiter = '\t')
for row in reader:
  etc
  etc

解析效果很好但是我正在对数据执行计算,这需要我直接访问我所在的行、之前的行,或者跳过前面的 10 行。

我不知道如何获取我所在文件的实际行号,以及如何移动到文件中的其他行(例如:“Current_Line”+ 10)并从该点开始访问数据在文件中转发。

解决方案是将整个文件读入数组,而不是尝试在文件中来回移动?我预计该文件将大于 160MB,并假设在文件中来回移动将是最有效的内存效率。

最佳答案

使用csvreader.next()转到下一行。要向前移动 10 行,请调用它 10 次或使用范围内循环。

使用csvreader.line_num获取当前行号。 感谢“Steven Rumbalski”指出,只有当您的数据不包含换行符(0x0A)时,您才能信任这一点。

要获取当前行之前的行,只需将最后一行缓存在变量中即可。

更多信息请点击:https://docs.python.org/2/library/csv.html

编辑

一个小例子: 导入csv

reader = csv.DictReader(open('Sourcefile.txt','rt'), delimiter = '\t')

last_line = None

for row in reader:
    print("Current row: %s (line %d)" % (row, reader.line_num));

    # do Sth with the row

    last_line = row
    if reader.line_num % 10 == 0:
        print("Modulo 10! Skipping 5 lines");
        try:
            for i in range(5):
                last_line = reader.next()
        except: # File is finished
            break

这完全一样,但在我看来这是更好的代码: 导入csv

reader = csv.DictReader(open('Sourcefile.txt','rt'), delimiter = '\t')

last_line = None

skip = 0
for row in reader:
    if skip > 0:
        skip -= 1
        continue;

    print("Current row: %s (line %d)" % (row, reader.line_num));

    # do Sth with the row

    last_line = row
    if reader.line_num % 10 == 0:
        print("Modulo 10! Skipping 5 lines");
        skip += 5
print("File is done!")

关于Python - 如何找到文件中的行位置,并围绕该行移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35019935/

相关文章:

python - 为什么 2019 年我们仍然不能使用 ctypes 从 Python 调用 C++?

python - 原始数据中有400*1个单元格,每个单元格有64*64个矩阵,如何将数据拉伸(stretch)成列向量,形成一个4096*400的矩阵?

python - Flask 模板中的全局变量

python - ViterbiParser 和 ChartParser 在 NLTK 中为 PCFG 返回 None

python - 从 groupby Pandas 数据框中绘制堆积图

python - 在python中处理命令的连续输出

python - 更正 XML 编码

python - PyQt:QTableWidget 取消全选?

python - 用 Pandas 替换另一个数据框中数据框中的值

python - Urllib2 返回带有换行符和制表符的 HTML