我正在创建一个文件编辑系统,并希望创建一个基于行的tell()函数,而不是基于字节的函数。此函数将在open(file)调用的“
with循环”内部使用。该函数是包含以下内容的类的一部分:
self.f = open(self.file, 'a+')
# self.file is a string that has the filename in it
以下是原始函数(如果您希望返回行和字节,则还具有char设置):
def tell(self, char=False):
t, lc = self.f.tell(), 0
self.f.seek(0)
for line in self.f:
if t >= len(line):
t -= len(line)
lc += 1
else:
break
if char:
return lc, t
return lc
我遇到的问题是,这将返回OSError,并且与系统如何遍历文件有关,但我不理解该问题。感谢任何能提供帮助的人。
我有一个较旧的Python 3版本,并且在Linux而不是Mac上运行,但是我能够重新创建非常接近您的错误的内容:
IOError: telling position disabled by next() call
一个 IO 错误,而不是一个 操作系统 错误,但在其他方面是相同的。奇怪的是,我无法使用your引起它open('a+', ...)
,但仅当以读取模式打开文件时:open('r+', ...)
。
更令人困惑的是,错误来自_io.TextIOWrapper
,一个 似乎
在Python的_pyio.py
文件中定义的类…我强调“出现”,因为:
该TextIOWrapper
文件中的的属性类似于_telling
我无法调用调用它的what-it-is对象_io.TextIOWrapper
。
中的TextIOWrapper
类在_pyio.py
可读,可写或随机访问文件之间没有任何区别。两者都应该起作用,或者两者都应该提高相同IOError
。
无论如何,文件中TextIOWrapper
描述的类 会 在进行迭代时 禁用该 方法
。这似乎是您遇到的问题(评论是我的):_pyio.py
tell
def __next__(self):
# Disable the tell method.
self._telling = False
line = self.readline()
if not line:
# We've reached the end of the file...
self._snapshot = None
# ...so restore _telling to whatever it was.
self._telling = self._seekable
raise StopIteration
return line
在您的tell
方法中,您几乎总是break
在迭代到达文件末尾之前就退出了迭代,并保持_telling
禁用状态(False
):
重置方法的另一种方法_telling
是该flush
方法,但是如果在进行迭代时调用该方法,也会失败:
IOError: can't reconstruct logical file position
解决这个问题的办法,至少我的系统上,就是要
叫seek(0)
上了TextIOWrapper
,这一切都恢复到已知状态(成功调用flush
在讨价还价中):
def tell(self, char=False):
t, lc = self.f.tell(), 0
self.f.seek(0)
for line in self.f:
if t >= len(line):
t -= len(line)
lc += 1
else:
break
# Reset the file iterator, or later calls to f.tell will
# raise an IOError or OSError:
f.seek(0)
if char:
return lc, t
return lc
如果这不是您系统的解决方案,那么它至少可以告诉您从哪里开始寻找。
PS:您应该考虑 始终 返回行号和字符偏移量。可以返回完全不同类型的函数很难处理—调用者丢弃自己不需要的值要容易得多。
我们试图在wifi禁用时测试应用程序的优先级高精度和位置更新。 如果用户在没有wifi网络可用的地方移动,也会出现同样的问题。 我认为正确的行为是使用其他手机传感器(如GPS)更新位置,如果手机不能更新位置与WiFi。 你能提供什么工作? 我们不想使用优先高精度,因为它会耗尽手机电池。我们的应用程序跟踪手机位置,它不应该取决于wifi设置和wifi网络可用性。
这个错误显示在logcat-java中。lang.NoSuchMethodError:没有静态方法zzce(Landroid/content/Context;)V类内Lcom/google/android/gms/common/GoogleAppAvailability;或者它的超类(声明'com.google.android.gms.common.GoogleAppAvailability'出现
本文向大家介绍如何使用HTML5地理位置查找位置?,包括了如何使用HTML5地理位置查找位置?的使用技巧和注意事项,需要的朋友参考一下 HTML5 Geolocation API使您可以与自己喜欢的网站共享位置。JavaScript可以捕获您的纬度和经度,并且可以发送到后端Web服务器,并进行精美的位置感知操作,例如查找本地商家或在映射上显示您的位置。 地理位置API使用全局导航器对象的新属性,即
问题内容: 我正在尝试使用以下命令安装golint:go get -u golang.org/x/lint/golint。而且我认为我遇到两个问题: 然后我尝试安装golang / tools,也失败了… 问题答案: 看来您在$ GOPATH /(在之下)中有一个文件。您应该删除它。另外,由于您使用的是Go 1.11或更高版本,因此可以直接在GOPATH /包含文件的任何目录的外部或直接在父目录中
我有一个带有两种视图类型的通用适配器。在我要禁用刷屏的ViewHolder中,我做到了:
BottomNavigationView不显示非活动菜单标题。 如何在BottomNavigationBar中显示所有菜单元素的标题?问题是在我的例子中只显示了被点击的元素的标题。