html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue
https://github.com/pydata/xarray/pull/7698#issuecomment-1489744942,https://api.github.com/repos/pydata/xarray/issues/7698,1489744942,IC_kwDOAMm_X85Yy7Qu,10678620,2023-03-30T06:02:41Z,2023-03-30T06:03:03Z,NONE,"Agreed, and a reference to a pretty authoritative source: https://github.com/python/cpython/blob/3.11/Modules/_io/bufferedio.c#L915
It's confusing the method has a parameter called `filename_or_obj` but doesn't actually handle filenames.
One workaround is to use `os.read` when passed a filename, and `.read()` when passed a file object. Something similar to:
```python
def get_magic_number(filename_or_obj, count=8):
if isinstance(filename_or_obj, (str, os.PathLike)):
fd = os.open(filename_or_obj, os.RDONLY) # Append os.O_BINARY on windows
magic_number = os.read(fd, count)
if len(magic_number) != count:
raise TypeError(""Error reading magic number"")
os.close(fd)
elif isinstance(filename_or_obj, io.BufferedIOBase):
if filename_or_obj.seekable():
pos = filename_or_obj.tell()
filename_or_obj.seek(0)
magic_number = filename_or_obj.read(count)
filename_or_obj.seek(pos)
else:
raise TypeError(""File not seekable."")
else:
raise TypeError(""Cannot read magic number."")
return magic_number
```
On my laptop (w/ SSD) using `os.read` is about 2x faster than using `.read()`","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1646350377