从 Python 中的元组列表中的字符串中删除字符

Remove characters from string in list of tuple in Python

我正在使用 Google 驱动器 API 作为我正在编写的应用程序的一部分。我目前有一个列表,其中包含以下信息的元组 (File name, File ID):

example > [(Finance Report - 2017-08-30, 109fADijw_OLojk2nbcxziw2DKn0), (Finance Report - 2017-08-24, 109Xjwj7Fuo_whoqpwl920jAAikLoEnU)]

我正在尝试从每个元组的文件名部分删除 Finance Report -。但是发生了一些奇怪的事情,它还从元组的文件 ID 部分剥离了数据。下面是这部分应用程序的代码片段。

q_param = "'%s' in parents" % PARENT_ID
files = []

response = drive_service.files().list(q=q_param,
    spaces='drive').execute()

for drive_file in response.get('files', []):
    files.append((drive_file.get('name'), drive_file.get('id')))

#Removing files that aren't labeled Finance report ...
files = [x for x in files if "Finance report" in x[0]]
#Stripping Finance Report from each file name
files = [tuple(x.strip('Finance report - ') for x in y) for y in files]

我从 Stack Overflow post 中得到了那一行,我发现它可以满足这种需求。但下面是剥离后的输出数据:

[(2017-08-30, 109fADijw_OLojk2nbcxziw2DK), (2017-08-24, 109Xjwj7Fuo_whoqpwl920jAAikLoE)]

之前和之后:

109fADijw_OLojk2nbcxziw2DKn0, 109fADijw_OLojk2nbcxziw2DK

我不太确定为什么会这样,因为我认为列表理解中的条带是在列表 files 中的 x[0] of every tuple x 上执行的。

为什么会这样?

元组中的项目不需要生成器表达式。仅在第一项上应用 strip

files = [(x.strip('Finance report - '), y) for x, y in files]

此外,由于剥离后留下的部分是固定宽度的,您可以采用slice代替剥离;剥离有时可以有趣,因为它对每个字符都起作用,而不是对整个子字符串起作用:

files = [tuple(x[-10:], y) for x, y in files]