OSError: [Errno 22] Invalid argument Python File Processing

OSError: [Errno 22] Invalid argument Python File Processing

我目前正在攻读计算机科学的 A2 课程,但我在随机访问文件处理方面遇到困难。

我正在尝试创建一个列表 UsersArray 来存储一些记录数据类型 UsersArray = [lion,soso,Sxia] 并循环遍历列表并将每条记录存储在文件 TEST.DAT 中计算出的特定偏移量处像这样 Address = hash(UsersArray[i].Password)。当我尝试执行 File.seek(Address) 时出现问题。它给我一个错误,告诉我 seek() 函数中的参数不正确,我不明白为什么会出现这个错误。

import Users,pickle

File = open("TEST.DAT","rb+")

lion = Users.Users()
lion.Password = "ilovefood"
soso = Users.Users()
soso.Password = "cats123"
Sxia = Users.Users()
Sxia.Password = "luca<3"

UsersArray = [lion,soso,Sxia]

for i in range(3):
    Address = hash(UsersArray[i].Password)
    File.seek(Address)
    pickle.dump(UsersArray[i],File)

File.close()

错误信息:

    Traceback (most recent call last):
  File "C:\Users\Vaio\Desktop\PythonA2\File Processing\RandomAccessWrite.py", line 17, in <module>
    File.seek(Address)
OSError: [Errno 22] Invalid argument
[Finished in 0.1s with exit code 1]
[shell_cmd: python -u "C:\Users\Vaio\Desktop\PythonA2\File Processing\RandomAccessWrite.py"]
[dir: C:\Users\Vaio\Desktop\PythonA2\File Processing]
[path: C:\MinGW\bin;C:\Users\Vaio\AppData\Local\Programs\Python\Python36-32\Scripts\;C:\Users\Vaio\AppData\Local\Programs\Python\Python36-32\]

提前感谢您的帮助!

我倾向于相信 jasonharper 解决了这个问题。我使用自己的用户对象复制了您的代码,并注释掉了 pickle.dump() 行。我能够毫无问题地打印出具有相应哈希值的用户。然后我取消注释 pickle.dump() 并使用我自己的(小)迭代值在 File.seek() 中使用;当我这样做时,一切正常并且 python 写入文件。我认为您正在计算的哈希值太大而无法写入文件。不确定它是否是您分配的一部分,但这些哈希值不会用作文件偏移量。