我正在为Web应用程序编写一个日志文件查看器,为此我想通过日志文件的行分页.文件中的项目是基于行的,底部是最新项目.
所以我需要一种tail()方法,可以n从底部读取行并支持偏移量.我想出的是这样的:
def tail(f, n, offset=0):
"""Reads a n lines from f with an offset of offset lines."""
avg_line_length = 74
to_read = n + offset
while 1:
try:
f.seek(-(avg_line_length * to_read), 2)
except IOError:
# woops. apparently file is smaller than what we want
# to step back, go to the beginning instead
f.seek(0)
pos = f.tell()
lines = f.read().splitlines()
if len(lines) >= to_read or pos == 0:
return lines[-to_read:offset and -offset or None]
avg_line_length …Run Code Online (Sandbox Code Playgroud) 我想检查字符串是否在文本文件中.如果是,请执行X.如果不是,请执行Y.但是,此代码始终True由于某种原因返回.任何人都可以看到有什么问题?
def check():
datafile = file('example.txt')
found = False
for line in datafile:
if blabla in line:
found = True
break
check()
if True:
print "true"
else:
print "false"
Run Code Online (Sandbox Code Playgroud) 我发现了//Python中的运算符,它在Python 3中与floor进行了划分.
是否有运营商与ceil分开?(我知道/在Python 3中进行浮点除法的运算符.)
我有一个文件,我不知道它会有多大(它可能很大,但尺寸会有很大差异).我想搜索最后10行左右,看看是否有任何一个字符串匹配.我需要尽可能快速有效地做到这一点,并且想知道是否有更好的东西:
s = "foo"
last_bit = fileObj.readlines()[-10:]
for line in last_bit:
if line == s:
print "FOUND"
Run Code Online (Sandbox Code Playgroud) 我有一个大约15GB的文件,它是一个日志文件,我应该分析输出.我已经对一个类似但非常小的文件进行了基本解析,只需几行日志记录.解析字符串不是问题.问题是巨大的文件及其包含的冗余数据量.
基本上我正在尝试制作一个我可以说的python脚本; 例如,给我5000个文件的最后一行.这又是基本的处理论点和所有这些,没有什么特别的,我可以做到这一点.
但是,如何定义或告诉文件阅读器只读取我从文件末尾指定的行数?我试图跳过文件开头的huuuuuuge数量,因为我对这些不感兴趣,说实话,从txt文件中读取大约15GB的行需要太长时间.有没有办法犯错误...从文件末尾开始阅读?这甚至有意义吗?
这一切都归结为读取15GB文件的问题,一行一行需要太长时间.所以我想在开始时跳过已经冗余的数据(至少对我来说是冗余的),只读取我想要读取的文件末尾的行数.
明显的答案是手动只是将N行的数量从文件复制到另一个文件,但有没有办法半自动地神奇地只是用python读取文件末尾的N行数?
我有一个 csv 文件,它会一直增长到大约 48M 行。
在向它添加新行之前,我需要阅读最后一行。
我尝试了下面的代码,但它太慢了,我需要一个更快的替代方案:
def return_last_line(filepath):
with open(filepath,'r') as file:
for x in file:
pass
return x
return_last_line('lala.csv')
Run Code Online (Sandbox Code Playgroud) 假设我正在处理一个非常大的csv文件.所以,我只能通过chunk将数据块读入内存.预期的事件流程应如下:
1)使用pandas从csv读取数据块(例如:10行).
2)颠倒数据的顺序
3)反过来将每行复制到新的csv文件.所以每个块(10行)从反向开始写入csv.
最后,csv文件应该颠倒顺序,这应该在不将整个文件加载到Windows OS的内存中的情况下完成.
我正在尝试做一个时间序列预测我需要数据从旧到最新(第一行最旧的条目).我无法将整个文件加载到内存中我正在寻找一种方法,如果可能的话,每次都可以执行每个块.
我尝试了来自kaggle train.csv的Rossmann数据集的数据集.你可以从中得到它github repo
我的尝试没有正确地将行复制到新的csv文件中.
下面显示的是我的代码:
import pandas as pd
import csv
def reverse():
fields = ["Store","DayOfWeek","Date","Sales","Customers","Open","Promo","StateHoliday",
"SchoolHoliday"]
with open('processed_train.csv', mode='a') as stock_file:
writer = csv.writer(stock_file,delimiter=',', quotechar='"',
quoting=csv.QUOTE_MINIMAL)
writer.writerow(fields)
for chunk in pd.read_csv("train.csv", chunksize=10):
store_data = chunk.reindex(index=chunk.index[::-1])
append_data_csv(store_data)
def append_data_csv(store_data):
with open('processed_train.csv', mode='a') as store_file:
writer = csv.writer(store_file,delimiter=',', quotechar='"',
quoting=csv.QUOTE_MINIMAL)
for index, row in store_data.iterrows():
print(row)
writer.writerow([row['Store'],row['DayOfWeek'],row['Date'],row['Sales'],
row['Customers'],row['Open'],row['Promo'],
row['StateHoliday'],row['SchoolHoliday']])
reverse()
Run Code Online (Sandbox Code Playgroud)
先感谢您
我需要知道如何从python中的文件中读取行,以便我先读取最后一行,然后以这种方式继续,直到光标到达文件的开头.有任何想法吗?
如何实现python中的'head'和'tail'命令以及文本文件的行后向读取?
许多文本编码都具有以下属性:您可以向后查看编码文本,但仍然可以对其进行解码.ASCII,UTF-8,UTF-16和UTF-32都具有此属性.这可以让你做一些方便的事情,比如读取文件的最后一行而不读取它前面的所有行,或者从文件中的当前位置向后移几行.
不幸的是,Python似乎没有任何方法可以向后解码文件.您不能read向后或seek按编码文件中的字符数量.codecs模块中的解码器支持向前递增解码,但不支持向后解码.似乎没有任何"UTF-8-backwardwards"编解码器,我可以以相反的顺序提供UTF-8字节.
我本可以自己实现与编解码器相关的字符边界同步,向后读取二进制块,并将正确对齐的块提供给codecs模块中的适当解码器,但这听起来像非专家会错过一些细微的细节和没有注意到输出是错误的.
有没有简单的方法可以使用现有工具在Python中向后解码文本?
有几个人似乎错过了阅读整个文件来做到这一点的观点.虽然我在澄清事情,但我还是补充一点,这也需要适用于可变长度编码.UTF-8支持是必须的.