我正在使用以下方法解析大型数据文件:
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/