Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pydrive:更改共享驱动器上文件的元数据_Python_Google Drive Api_Pydrive - Fatal编程技术网

Python Pydrive:更改共享驱动器上文件的元数据

Python Pydrive:更改共享驱动器上文件的元数据,python,google-drive-api,pydrive,Python,Google Drive Api,Pydrive,我正在尝试使用包装器pydriveforgoogledriveapi制作一个脚本来处理共享驱动器上的大量文件。我可以将文件加载到嵌套字典中,但当我尝试更改元数据时,找不到该文件(由ID引用)。这里有几个类似的问题,我想我已经复习并正确地尝试过了 我尝试过包含这些参数,在获取文件时,这些参数似乎起到了关键作用: file_list = drive.ListFile({ 'q': "title contains 'PORTMUZ' a

我正在尝试使用包装器pydriveforgoogledriveapi制作一个脚本来处理共享驱动器上的大量文件。我可以将文件加载到嵌套字典中,但当我尝试更改元数据时,找不到该文件(由ID引用)。这里有几个类似的问题,我想我已经复习并正确地尝试过了

我尝试过包含这些参数,在获取文件时,这些参数似乎起到了关键作用:

file_list = drive.ListFile({
                            'q': "title contains 'PORTMUZ' and trashed=false", 
                            'supportsAllDrives' : True, 
                            'includeItemsFromAllDrives' : True, 
                            'corpora' : 'drive', 
                            'driveId' : portmuz_id
                            }).GetList()
这是整个函数,我仍在让它工作,但现在它只设置为更改名称:

def move_to_archive():
for key, data in index.items():
    if index[key]['active'] == False and index[key]['parents'] == alle_leerlingen_id and 'TEST' in key:
        print(key, 'is geen huidige leerling meer maar staat nog in de map Portfolio/Alle Leerlingen. Verplaatsen naar archief?')
        if choose() == True:
            file = drive.CreateFile({
                                    'id': index[key]['id']
                                    })
            file['title'] = 'JEP'
            file.Upload(param={
                            'supportsAllDrives' : True, 
                            'includeItemsFromAllDrives' : True, 
                            'supportsTeamDrives' : True,
                            'corpora' : 'drive', 
                            'driveId' : portmuz_id
                            })
            index[key]['parents'] == portmuz_archief_id
我已经检查了错误返回的ID,它是正确的

Traceback (most recent call last):
  File "script3.py", line 135, in <module>
    main()
  File "script3.py", line 124, in main
    move_to_archive()
  File "script3.py", line 96, in move_to_archive
    print(file.FetchMetadata())
  File "C:\Users\ict\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pydrive\auth.py", line 75, in _decorated
    return decoratee(self, *args, **kwargs)
  File "C:\Users\ict\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pydrive\files.py", line 239, in FetchMetadata
    raise ApiRequestError(error)
pydrive.files.ApiRequestError: <HttpError 404 when requesting https://www.googleapis.com/drive/v2/files/1E80Hp4WJI_ivirQ9TJCCzlFU0ykvDsWH?alt=json returned "File not found: 1E80Hp4WJI_ivirQ9TJCCzlFU0ykvDsWH">
回溯(最近一次呼叫最后一次):
文件“script3.py”,第135行,在
main()
文件“script3.py”,第124行,主
将_移动到_存档()
文件“script3.py”,第96行,在move_to_archive中
打印(file.FetchMetadata())
文件“C:\Users\ict\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\localpackages\Python38\site Packages\pydrive\auth.py”,第75行,在
返回装饰对象(自我、*args、**kwargs)
FetchMetadata中的文件“C:\Users\ict\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\Local Packages\Python38\site Packages\pydrive\files.py”,第239行
raise APIRestError(错误)
pydrive.files.ApiRequestError:

您更改的元数据是什么?也许当你对文件进行更改时,它们会更改父项?@ziganotschka现在只有名称更改,父项保持不变。如果我能让它工作的话,我会用这个函数来改变双亲。我想知道一旦你改变双亲,
driveId
是否不再是原来的。我从您的代码中看到,您使用了
drive.CreateFile()
——因此您正在创建一个新文件。新文件将有一个新id。很抱歉,如果我误解了问题设置,也许您可以提供更多详细信息,以澄清您到底想做什么,以及问题是什么(以及在什么步骤)。@ziganotschkaI认为您的想法是首先在本地创建一个与您要引用的在线对象具有相同id的对象。然后更改它的元数据并调用.Upload()来调用API并处理更改。