有一个奇怪的问题。
我有一个Django应用程序,它将打开一个文件(表示为Django FieldFile
),并使用readline()
读取每一行,如下所示:
with file.open(mode='r') as f:
row = f.readline()
# do something with row...
该文件是文本,采用utf-8编码,并且行以\r\n
终止。
问题是每一行都以字符串的十六进制表示形式读取,因此,我得到的不是“ Hello”,而是“ 48656c6c6f”。
一些陌生的东西:
它以前可以正常工作,但是在某个时候它已将其破坏(我已经尝试回滚到以前的提交,但是它仍然很不稳定,因此可能依赖项已经更新,而我的requirements.txt
中没有此内容)。在我的测试中错过了它,因为它位于应用程序中很少使用的部分。
如果我使用readlines()
而不是readline()
读取相同的文件,我会看到[b'...']
中包裹的文件的正确字符串表示形式]
如果我使用直接的Python open()
和readline()
从解释程序执行此文件,则该文件将正常读取
使用mode='rt'
强制文本模式不会更改行为,mode='rb'
该文件存储在Minio存储桶中,因此默认存储是storages.backends.s3boto3.S3Boto3Storage
中的django-storages
,而不是默认的Django存储类。这意味着boto3
,botocore
和s3fs
也处于混合状态,这使我的调试更加混乱。
[恼于为什么这以前起作用以及我做错了什么。
环境是在Docker容器中运行的Python 3.8,Django 2.2.8和3.0(相同的结果。)>
有一个奇怪的问题。我有一个Django应用程序,它将打开一个文件(表示为Django FieldFile),并使用readline()如下读取每一行:file.open(mode ='r')as f:row = f.readline()#。 ..
这似乎很奇怪。我认为您尝试执行以下操作后会立即看到解决方案(如果确实无法找到答案,我会更新我的答案或将其删除,但我很有信心)
假设有一些代码,即monkeypatching file.open或django视图功能。