Seeking from end of file throwing unsupported exception
From the documentation for Python 3.2 and up:
In text files (those opened without a
b
in the mode string), only seeks relative to the beginning of the file are allowed (the exception being seeking to the very file end withseek(0, 2)
).
This is because text files do not have a 1-to-1 correspondence between encoded bytes and the characters they represent, so seek
can't tell where to jump to in the file to move by a certain number of characters.
If your program is okay with working in terms of raw bytes, you can change your program to read:
f = open('D:\SGStat.txt', 'ab')
f.seek(-3, 2)
Note the b
in the mode string, for a binary file. (Also note the removal of the redundant f.seek(0, 2)
call.)
However, you should be aware that adding the b
flag when you are reading or writing text can have unintended consequences (with multibyte encoding for example), and in fact changes the type of data read or written.
UnsupportedOperation: can't do nonzero cur-relative seeks : Python
It seems like offset from current stream and end of stream only supported in binary mode. Which you have to open the file with
open(r'C:\Users\Manish\Desktop\File5.txt', 'rb')
Seek function Python
When you open
file in text mode, the file-like object it returns is io.TextIOWrapper
(derived from io._TextIOBase
). Their seek()
with regard to whence
works as follows:
The default value for whence is SEEK_SET.
SEEK_SET
or0
: seek from the start of the stream (the default); offset must either be a number returned byTextIOBase.tell()
, or zero. Any other offset value produces undefined behaviour.
SEEK_CUR
or1
: “seek” to the current position; offset must be zero, which is a no-operation (all other values are unsupported).
SEEK_END
or2
: seek to the end of the stream; offset must be zero (all other values are unsupported).
I.e. you can use whence
values of 1
and 2
only with offset
of 0
.
Python:How to change the position in the file from current file position?
Your code works in Python 2, but not in 3. You must open the file as binary:
fileobj = open("intro.txt","rb");
Python error message io.UnsupportedOperation: not readable
You are opening the file as "w"
, which stands for writable.
Using "w"
you won't be able to read the file. Use the following instead:
file = open("File.txt", "r")
Additionally, here are the other options:
"r" Opens a file for reading only.
"r+" Opens a file for both reading and writing.
"rb" Opens a file for reading only in binary format.
"rb+" Opens a file for both reading and writing in binary format.
"w" Opens a file for writing only.
"a" Open for writing. The file is created if it does not exist.
"a+" Open for reading and writing. The file is created if it does not exist.
Why do I get an UnsupportedOperationException when trying to remove an element from a List?
Quite a few problems with your code:
On Arrays.asList
returning a fixed-size list
From the API:
Arrays.asList
: Returns a fixed-size list backed by the specified array.
You can't add
to it; you can't remove
from it. You can't structurally modify the List
.
Fix
Create a LinkedList
, which supports faster remove
.
List<String> list = new LinkedList<String>(Arrays.asList(split));
On split
taking regex
From the API:
String.split(String regex)
: Splits this string around matches of the given regular expression.
|
is a regex metacharacter; if you want to split on a literal |
, you must escape it to \|
, which as a Java string literal is "\\|"
.
Fix:
template.split("\\|")
On better algorithm
Instead of calling remove
one at a time with random indices, it's better to generate enough random numbers in the range, and then traversing the List
once with a listIterator()
, calling remove()
at appropriate indices. There are questions on stackoverflow on how to generate random but distinct numbers in a given range.
With this, your algorithm would be O(N)
.
Opening zipfile of unsupported compression-type silently returns empty filestream, instead of throwing exception
The cause is the combination of:
- this file's compression type is type 9: Deflate64/Enhanced Deflate (PKWare's proprietary format, as opposed to the more common type 8)
- and a zipfile bug: it will not throw an exception for unsupported compression-types. It used to just silently return a bad file object [Section 4.4.5 compression method]. Aargh. How bogus. UPDATE: I filed bug 14313 and it was fixed back in 2012 so it now raises NotImplementedError when the compression type is unknown.
A command-line Workaround is to unzip, then rezip, to get a plain type 8: Deflated.
zipfile will throw an exception in 2.7 , 3.2+ I guess zipfile will never be able to actually handle type 9, for legal reasons.
The Python doc makes no mention whatsoever that zipfile cannot handle other compression types :(
Related Topics
Reference Requirements.Txt for the Install_Requires Kwarg in Setuptools Setup.Py File
How to Set Headers Using Python's Urllib
Does Python's Time.Time() Return the Local or Utc Timestamp
Sending Mail from Python Using Smtp
How to Wrap Every Method of a Class
How to Create an Empty Array and Then Append to It in Numpy
How to Create a Slug in Django
How to Use 'Cv2.Findcontours' in Different Opencv Versions
Multiprocessing VS Multithreading VS Asyncio in Python 3
Python - Initializing Multiple Lists/Line
Python Integer Incrementing with ++
Regular Expression: Match Start or Whitespace
Suppress Insecurerequestwarning: Unverified Https Request Is Being Made in Python2.6
Matplotlib Scatter Plot with Legend