我目前正在计算机科学专业学习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\]
谢谢您的帮助!
答案 0 :(得分:0)
我倾向于相信杰森·哈珀(jasonharper)解决了这个问题。我使用自己的用户对象复制了您的代码,并注释了pickle.dump()
行。我能够使用相应的哈希值打印两个用户,而没有任何问题。然后我取消了对pickle.dump()
的注释,并使用了自己的(小的)迭代值在File.seek()
中使用;当我这样做时,一切正常,并且python写入了文件。我认为您正在计算的哈希值太大而无法写入文件。不知道这是否属于您的分配,但是这些哈希值不能用作文件偏移量。