Related
Here's an example of my dataframe:
d = {'group': ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'c', 'd', 'd'], \
'round': [3, 3, 2, 1, 3, 1, 3, 3, 3, 2, 1], \
'score': [0.3, 0.1, 0.6, 0.8, 0.2, 0.5, 0.5, 0.6, 0.4, 0.9, 0.1]}
df = pd.DataFrame(d)
df
group round score
0 a 3 0.3
1 a 3 0.1
2 a 2 0.6
3 b 1 0.8
4 b 3 0.2
5 b 1 0.5
6 b 3 0.5
7 b 3 0.6
8 c 3 0.4
9 d 2 0.9
10 d 1 0.1
My actual dataframe has 6 columns and > 1,000,000 rows. I'm trying to figure out the fastest way to do the following:
For each group find the average of scores and perform some calculation with it for each of 3 rounds. If there are no scores, write 'NA'.
I'm not sure if it would be faster to make a list of lists and then convert it into a dataframe or make a new dataframe and populate that, so i went with the list first:
def test_df(data):
value_counts = data['group'].value_counts().to_dict()
avgs = []
for key, val in value_counts.items():
row = data[data['group'] == key]
x = [key]
if val < 2:
x.extend([10 * row['score'].values[0] + 1 if i == row['round'].values[0] else 'NA' for i in range (1,4)])
else:
x.extend([(10 * row[row['round'] == i]['score'].mean() + 1) if len(row[row['round'] == i]) > 0 else 'NA' for i in range(1, 4)])
avgs.append(x)
return avgs
Here I created a separate case because about 80% of groups in my data only have one row, so I figured it might speed things up maybe?
this returns the correct results in format [group, round 1, round 2, round 3]
[['b', 7.5, 'NA', 5.333333333333333],
['a', 'NA', 7.0, 3.0],
['d', 2.0, 10.0, 'NA'],
['c', 'NA', 'NA', 5.0]]
but it's looking like it's going to take a really really long time on the actual dataframe...
Does anyone have any better ideas?
It looks to me like you're basically going a groupby/mean and a pivot.
import pandas as pd
d = {'group': ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'c', 'd', 'd'], \
'round': [3, 3, 2, 1, 3, 1, 3, 3, 3, 2, 1], \
'score': [0.3, 0.1, 0.6, 0.8, 0.2, 0.5, 0.5, 0.6, 0.4, 0.9, 0.1]}
df = pd.DataFrame(d)
df = (df.groupby(['group','round'])['score'].mean()*10+1).reset_index()
df.pivot_table(index='group',columns='round',values='score', fill_value='NA').reset_index().values
Output
array([['a', 'NA', 7.0, 3.0],
['b', 7.5, 'NA', 5.333333333333333],
['c', 'NA', 'NA', 5.0],
['d', 2.0, 10.0, 'NA']], dtype=object)
The imbalanced dataset may show different results, but I tested with the blow scripts and found out even with the pandas dataframe, the result shows okay performance. However, you can always compare it with the native python data structure.
import random
import datetime
import pandas as pd
def generate_data(): # augmentation
data = {'group': [], 'round': [], 'score': []}
for index in range(10 ** 6): # sample size
data['group'].append(random.choice(['a', 'b', 'c', 'd']))
data['round'].append(random.randrange(1, 4))
data['score'].append(round(random.random(), 1))
return data
def calc_with_native_ds(data): # native python data structure
pass
def calc_with_pandas_df(df): # pandas dataframe
return df.groupby(['group', 'round']).mean()
if __name__ == '__main__':
data = generate_data()
df = pd.DataFrame(data)
print(df.shape)
start_datetime = datetime.datetime.now()
# calc_with_native_ds(data)
calc_with_pandas_df(df)
end_datetime = datetime.datetime.now()
elapsed_time = round((end_datetime - start_datetime).total_seconds(), 5)
print(f"elapsed_time: {elapsed_time}")
When i specify the 'dtype' when creating an array i get a different shape than when i don't specify 'dtype'.
I have this code below where i only want the function np.sort() to sort taking 'factor' and 'var' as parameters, not 'data'.
Because inside 'data' i have 'None' values.
When i run this code i get this: TypeError: '<' not supported between instances of 'int' and 'NoneType'
But when i substitute 'None' with any 'int' the code runs as expected.
How can i make the code not to consider 'data' when sorting and/or not to break with 'None' values inside the list.
Code:
>>> hzhDtype = [('factor', float), ('var', int), ('data', list)]
>>> values = [
... (3.82, 21, ['foo1', None, None, 1, 'g1', 'x', None, 0]),
... (1.91, 21, ['foo1_GT', 'foo2', 3, 1, 'g1', 'x', None, 0]),
... (1.91, 21, ['foo1_GT', 'foo3', 1, 1, 'g1', 'x', None, 0]),
... (1.91, 21, ['foo1_GT', 'foo4', 1, 1, 'g1', 'x', None, 0]),
... (1.91, 21, ['foo1_GT', 'foo5', 2, 1, 'g1', 'x', None, 0]),
... (2.55, 21, ['foo1_GT', 'foo6', 1, 1, 'g1', 'x', None, 0]),
... (0.5, 1, ['foo2_GT', 'foo1', 2, 3, 'g2', 'x', None, 1]),
... (0.5, 1, ['foo2_GT', 'foo1', 2, 3, 'g1', 'x', 0, 1]),
... (0.5, 1, ['foo2_GT', 'foo1', 2, 3, 'g2', 'x', None, 0]),
... (0.5, 1, ['foo2_GT', 'foo1', 2, 3, 'g2', 'x', None, 0]),
... (2.0, 2, ['foo2_GT', 'foo1', 2, 1, 'g2', 'x', None, 0]),
... (0.5, 1, ['foo2_GT', 'foo1', 2, 2, 'g1', 'x', None, 1]),
... (0.5, 1, ['foo2_GT', 'foo1', 2, 2, 'g2', 'x', 0, 1]),
... (0.5, 1, ['foo2_GT', 'foo1', 2, 2, 'g1', 'x', None, 0]),
... (0.5, 1, ['foo2_GT', 'foo1', 2, 2, 'g1', 'x', None, 0]),
... (0.5, 1, ['foo2_GT', 'foo6', 1, 2, 'g1', 'x', None, 1]),
... (2.0, 4, ['foo3_GT', 'foo1', 2, 1, 'g2', 'x', None, 0]),
... (2.0, 4, ['foo3_GT', 'foo1', 2, 1, 'g2', 'x', None, 0]),
... (0.5, 1, ['foo3_GT', 'foo1', 2, 2, 'g1', 'x', None, 0]),
... (0.5, 1, ['foo3_GT', 'foo1', 2, 2, 'g1', 'x', None, 0]),
... (5.0, 5, ['foo3_GT', 'foo1', 2, 3, 'g2', 'x', None, 0]),
... (5.0, 5, ['foo3_GT', 'foo1', 2, 3, 'g2', 'x', None, 0]),
... (2.0, 1, ['foo4_GT', 'foo1', 2, 1, 'g1', 'x', None, 1]),
... (2.0, 1, ['foo4_GT', 'foo1', 2, 1, 'g2', 'x', 0, 1]),
... (2.0, 1, ['foo4_GT', 'foo1', 2, 1, 'g1', 'x', None, 0]),
... (2.0, 1, ['foo4_GT', 'foo1', 2, 1, 'g1', 'x', None, 0]),
... (1.0, 1, ['foo4_GT', 'foo2', 3, 1, 'g1', 'x', None, 1]),
... (1.0, 1, ['foo4_GT', 'foo2', 3, 1, 'g2', 'x', 0, 1]),
... (1.0, 1, ['foo4_GT', 'foo2', 3, 1, 'g1', 'x', None, 0]),
... (1.0, 1, ['foo4_GT', 'foo2', 3, 1, 'g1', 'x', None, 0]),
... (1.0, 1, ['foo4_GT', 'foo5', 2, 1, 'g1', 'x', 1, 0]),
... (1.0, 1, ['foo4_GT', 'foo5', 2, 1, 'g1', 'x', None, 1]),
... (1.0, 1, ['foo4_GT', 'foo6', 1, 1, 'g1', 'x', None, 1]),
... (4.0, 3, ['foo5_GT', 'foo1', 2, 2, 'g2', 'x', None, 1]),
... (4.0, 3, ['foo5_GT', 'foo1', 2, 2, 'g1', 'x', 0, 1]),
... (4.0, 3, ['foo5_GT', 'foo1', 2, 2, 'g2', 'x', None, 0]),
... (4.0, 3, ['foo5_GT', 'foo1', 2, 2, 'g2', 'x', None, 0]),
... (3.0, 3, ['foo5_GT', 'foo2', 3, 1, 'g1', 'x', 1, 0]),
... (3.0, 3, ['foo5_GT', 'foo2', 3, 1, 'g1', 'x', None, 1]),
... (3.0, 3, ['foo5_GT', 'foo3', 1, 1, 'g1', 'x', 1, 0]),
... (3.0, 3, ['foo5_GT', 'foo3', 1, 1, 'g1', 'x', None, 1]),
... (3.0, 3, ['foo5_GT', 'foo6', 1, 1, 'g1', 'x', None, 1]),
... (3.0, 3, ['foo5_GT', 'foo6', 1, 1, 'g2', 'x', 0, 1]),
... (3.0, 3, ['foo5_GT', 'foo6', 1, 1, 'g1', 'x', None, 0]),
... (2.0, 3, ['foo5_GT', 'foo6', 1, 1, 'g1', 'x', None, 0]),
... (3.0, 3, ['foo5_GT', 'foo6', 1, 1, 'g1', 'x', None, 0]),
... (3.0, 3, ['foo5_GT', 'foo6', 1, 1, 'g1', 'x', None, 0]),
... (4.0, 3, ['foo6_GT', 'foo1', 2, 1, 'g2', 'x', None, 0]),
... (4.0, 3, ['foo6_GT', 'foo1', 2, 1, 'g2', 'x', None, 0]),
... (3.0, 3, ['foo6_GT', 'foo2', 3, 2, 'g1', 'x', 1, 0]),
... (3.0, 3, ['foo6_GT', 'foo2', 3, 2, 'g1', 'x', None, 1]),
... (3.0, 3, ['foo6_GT', 'foo3', 1, 2, 'g1', 'x', 1, 0]),
... (3.0, 3, ['foo6_GT', 'foo3', 1, 2, 'g1', 'x', None, 1]),
... (3.0, 3, ['foo6_GT', 'foo5', 2, 2, 'g1', 'x', 1, 0]),
... (3.0, 3, ['foo6_GT', 'foo5', 2, 2, 'g1', 'x', None, 1])
... ]
>>> # this is the shape i want, but i can't sort it.
>>> arr = np.array(values)
>>> arr.shape
(55,3)
>>> np.sort(arr, axis=0)[::-1]
>>> *** TypeError: '<' not supported between instances of 'NoneType' and 'int'
>>>
>>> # here i have the dtype i want but not the shape i want
>>> arr2 = np.array(values, dtype=hzhDtype)
>>> arr2.shape()
(55,)
>>> np.sort(arr2, order=['factor', var'])[::-1]
*** TypeError: '<' not supported between instances of 'int' and 'NoneType'
>>> # i don't know why it look at the third column ('data') if i only want it to order considering 'factor' & 'var'.
The 2nd case makes structured array, with 3 fields, not 3 columns. If is 1d, not 2d. You may need to read the structured array docs a bit more carefully.
As for the sort problem, re(read) np.sort:
order : str or list of str, optional
When `a` is an array with fields defined, this argument specifies
which fields to compare first, second, etc. A single field can
be specified as a string, and not all fields need be specified,
but unspecified fields will still be used, in the order in which
they come up in the dtype, to break ties.
It says "unspecified fields will still be used".
Looks like we can get around the None comparison problem by using argsort:
In [35]: idx=np.argsort(arr[['factor','var']])
In [36]: idx
Out[36]:
array([19, 14, 13, 12, 11, 9, 15, 8, 6, 7, 18, 28, 26, 29, 30, 31, 32,
27, 1, 2, 3, 4, 22, 23, 24, 25, 10, 44, 16, 17, 5, 51, 52, 49,
46, 45, 42, 43, 50, 41, 54, 39, 38, 37, 53, 40, 0, 36, 35, 34, 47,
48, 33, 21, 20])
In [37]: arr1=arr[idx]
am trying to subset a dataset based on a condition and pick the rows until it sees the value based on a condition
Condition, if Column A == 0, column B should start with 'a'.
Dataset:
A B
0 aa
1 ss
2 dd
3 ff
0 ee
1 ff
2 bb
3 gg
0 ar
1 hh
2 ww
0 jj
1 ll
expected:
[0:{'A':[0,1,2,3], 'B':['aa','ss','dd','ff']}, 1:{'A':[0,1,2], 'B':['ar','hh,'ww']} ]
The series starts from column A == 0 and ends until the next 0.
In total there are 4 different dictionaries in that dataframe.
May be try with cumsum as well ~
{x : y.to_dict('list')for x , y in df.groupby(df['A'].eq(0).cumsum())}
Out[87]:
{1: {'A': [0, 1, 2, 3], 'B': ['aa', 'ss', 'dd', 'ff']},
2: {'A': [0, 1, 2, 3], 'B': ['ee', 'ff', 'bb', 'gg']},
3: {'A': [0, 1, 2], 'B': ['rr', 'hh', 'ww']},
4: {'A': [0, 1], 'B': ['jj', 'll']}}
Do a cumsum on the condition to identify the groups, then groupby:
groups = (df['A'].eq(0) & df['B'].str.startswith('a')).cumsum()
{k:v.to_dict(orient='list') for k,v in df.groupby(groups)}
Output:
{1: {'A': [0, 1, 2, 3], 'B': ['aa', 'ss', 'dd', 'ff']},
2: {'A': [0, 1, 2, 3], 'B': ['ae', 'ff', 'bb', 'gg']},
3: {'A': [0, 1, 2, 0, 1], 'B': ['ar', 'hh', 'ww', 'jj', 'll']}}
This answers this question's revision 2020-11-04 19:29:39Z. Later additions/edits to the question or additional requirements in the comments will not be considered.
First find the desired rows and select them into a new dataframe. Group the rows and convert them to dicts.
g = (df.A.eq(0).astype(int) + df.B.str.startswith('a')).replace(0, method='ffill') - 1
df_BeqA = df[g.astype('bool')]
{x: y.to_dict('list') for x , y in df_BeqA.groupby(df_BeqA.A.eq(0).cumsum() - 1)}
Out:
{0: {'A': [0, 1, 2, 3], 'B': ['aa', 'ss', 'dd', 'ff']},
1: {'A': [0, 1, 2], 'B': ['ar', 'hh', 'ww']}}
I want to remove a dictionary from a nested dictionary based on a condition.
dict :
{1: {'A': [1, 2, 3, 0], 'B': ['ss', 'dd', 'ff', 'aa']},
2: {'A': [0, 1, 2, 3], 'B': ['ee', 'ff', 'bb', 'gg']},
3: {'A': [0, 1, 2], 'B': ['ar', 'hh', 'ww']},
4: {'A': [ 1, 0], 'B': [ 'll', 'jj']}}
I want to remove if 'A' == 0, then if B isnt starting with a, then I want to delete that particular dictionary.
Expected:
{1: {'A': [1, 2, 3, 0], 'B': ['ss', 'dd', 'ff', 'aa']},
2: {'A': [0, 1, 2], 'B': ['ar', 'hh', 'ww']},
}
Check
s=pd.DataFrame(d)
new_d = s.loc[:,s.loc['B'].str[0].str[0]=='a'].to_dict()
Out[99]:
{1: {'A': [0, 1, 2, 3], 'B': ['aa', 'ss', 'dd', 'ff']},
3: {'A': [0, 1, 2], 'B': ['ar', 'hh', 'ww']}}
i assume the keys change on the new dictionary is on purpose, so here is a simple solution with no extra libraries(nested is your dictionary)
temp = [x for x in nested.values() if 0 in x['A'] and any([i[0] == 'a' for i in x['B']])]
new_dict = dict(enumerate(temp, 1))
if you want you can make it a one liner, or you can split the condition to be a function
like this
def check(x):
if 0 in x['A']:
return any([i[0] == 'a' for i in x['B']])
return True
temp = [x for x in nested.values() if check(x)]
Now if you prefer using filter() the above 2 variations become:
temp = filter(lambda x: 0 in x['A'] and any(i[0] == 'a' for i in x['B']), nested.values())
and if you decide to declare check() like above you can do it in this elegant way(notice i use new_dict here, instead of temp since it doen's make sence to split it when it so compact)
new_dict = dict(enumerate(filter(check, nested.values()),1)
Your question needs more clarity.
Assuming you intend to delete
{
1: {'A': [0, 1, 2, 3], 'B': ['aa', 'ss', 'dd', 'ff']},
2: {'A': [0, 1, 2], 'B': ['ar', 'hh', 'ww']},
}
from
{1: {'A': [0, 1, 2, 3], 'B': ['aa', 'ss', 'dd', 'ff']},
2: {'A': [0, 1, 2, 3], 'B': ['ee', 'ff', 'bb', 'gg']},
3: {'A': [0, 1, 2], 'B': ['ar', 'hh', 'ww']},
4: {'A': [0, 1], 'B': ['jj', 'll']}}
You can try this:
import re
r = re.compile("a.*")
input_dictionary = {
1: {'A': [0, 1, 2, 3], 'B': ['aa', 'ss', 'dd', 'ff']},
2: {'A': [0, 1, 2, 3], 'B': ['ee', 'ff', 'bb', 'gg']},
3: {'A': [0, 1, 2], 'B': ['ar', 'hh', 'ww']},
4: {'A': [0, 1], 'B': ['jj', 'll']}}
key_list = list(input_dictionary.keys())
for key in key_list:
value = input_dictionary[key]
if(any(r.match(b_element) for b_element in value['B']) and 0 in value['A']):
del input_dictionary[key]
print("Deleting key: ", key)
I am trying to use PyInstaller to put an exe wrapper around a Python 2.7 script that imports Python package python-arabic-reshaper, the script works fine when running by itself, but ends in the error below if run from within a Pyinstaller exe.
The config file is default-config.ini and configparser package is installed.
Code:
import sys
from arabic_reshaper import ArabicReshaper
config1={
'delete_harakat':False,
'support_ligatures':True,
'RIAL SIGN':True,
}
reshaper=ArabicReshaper(configuration=config1)
text=u"????"
reshaped_text=reshaper.reshape(text)
print(sys.stdout.encoding)
print(reshaped_text.encode('utf-8'))
Error:
F:\HisHands\Yang>F:\HisHands\Yang\dist\bob_test_1.exe
WARNING: file already exists but should not: C:\Users\Ownerc\AppData\Local\Temp\
_MEI153402\include\pyconfig.h
Traceback (most recent call last):
File "", line 13, in
File "C:\Users\Ownerc\Downloads\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\lo
ader\pyi_importers.py", line 270, in load_module
File "F:\HisHands\Yang\build\bob_test_1\out00-PYZ.pyz\arabic_reshaper", line 1
, in
File "C:\Users\Ownerc\Downloads\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\lo
ader\pyi_importers.py", line 270, in load_module
File "F:\HisHands\Yang\build\bob_test_1\out00-PYZ.pyz\arabic_reshaper.arabic_r
eshaper", line 1377, in
File "F:\HisHands\Yang\build\bob_test_1\out00-PYZ.pyz\arabic_reshaper.arabic_r
eshaper", line 1248, in __init__
ValueError: Invalid configuration: A section with the name ArabicReshaper was no
t found
I also used the archive viewer tool to view the content of the executable generated, shown below
pos, length, uncompressed, iscompressed, type, name
[(0, 170, 235, 1, 'm', u'struct'),
(170, 1153, 2704, 1, 'm', u'pyimod01_os_path'),
(1323, 4222, 11804, 1, 'm', u'pyimod02_archive'),
(5545, 6034, 18956, 1, 'm', u'pyimod03_importers'),
(11579, 1589, 4450, 1, 's', u'pyiboot01_bootstrap'),
(13168, 347, 504, 1, 's', u'bob_test_1'),
(13515, 48403, 89416, 1, 'b', u'VCRUNTIME140.dll'),
(61918, 39529, 87552, 1, 'b', u'_bz2.pyd'),
(101447, 624405, 1443840, 1, 'b', u'_hashlib.pyd'),
(725852, 76667, 146432, 1, 'b', u'_lzma.pyd'),
(802519, 28814, 66048, 1, 'b', u'_socket.pyd'),
(831333, 888894, 2045440, 1, 'b', u'_ssl.pyd'),
(1720227, 10439, 19136, 1, 'b', u'api-ms-win-core-console-l1-1-0.dll'),
(1730666, 10253, 18624, 1, 'b', u'api-ms-win-core-datetime-l1-1-0.dll'),
(1740919, 10265, 18624, 1, 'b', u'api-ms-win-core-debug-l1-1-0.dll'),
(1751184, 10322, 18624, 1, 'b', u'api-ms-win-core-errorhandling-l1-1-0.dll'),
(1761506, 11406, 22208, 1, 'b', u'api-ms-win-core-file-l1-1-0.dll'),
(1772912, 10289, 18624, 1, 'b', u'api-ms-win-core-file-l1-2-0.dll'),
(1783201, 10419, 18624, 1, 'b', u'api-ms-win-core-file-l2-1-0.dll'),
(1793620, 10290, 18624, 1, 'b', u'api-ms-win-core-handle-l1-1-0.dll'),
(1803910, 10469, 19136, 1, 'b', u'api-ms-win-core-heap-l1-1-0.dll'),
(1814379, 10302, 18624, 1, 'b', u'api-ms-win-core-interlocked-l1-1-0.dll'),
(1824681, 10532, 19136, 1, 'b', u'api-ms-win-core-libraryloader-l1-1-0.dll'),
(1835213, 11178, 21184, 1, 'b', u'api-ms-win-core-localization-l1-2-0.dll'),
(1846391, 10461, 19136, 1, 'b', u'api-ms-win-core-memory-l1-1-0.dll'),
(1856852, 10395, 18624, 1, 'b', u'api-ms-win-core-namedpipe-l1-1-0.dll'),
(1867247,
10555,
19648,
1,
'b',
u'api-ms-win-core-processenvironment-l1-1-0.dll'),
(1877802, 11078, 20672, 1, 'b', u'api-ms-win-core-processthreads-l1-1-0.dll'),
(1888880, 10498, 19136, 1, 'b', u'api-ms-win-core-processthreads-l1-1-1.dll'),
(1899378, 10215, 18112, 1, 'b', u'api-ms-win-core-profile-l1-1-0.dll'),
(1909593, 10486, 19136, 1, 'b', u'api-ms-win-core-rtlsupport-l1-1-0.dll'),
(1920079, 10347, 18624, 1, 'b', u'api-ms-win-core-string-l1-1-0.dll'),
(1930426, 10870, 20672, 1, 'b', u'api-ms-win-core-synch-l1-1-0.dll'),
(1941296, 10524, 19136, 1, 'b', u'api-ms-win-core-synch-l1-2-0.dll'),
(1951820, 10598, 19648, 1, 'b', u'api-ms-win-core-sysinfo-l1-1-0.dll'),
(1962418, 10376, 18624, 1, 'b', u'api-ms-win-core-timezone-l1-1-0.dll'),
(1972794, 10274, 18624, 1, 'b', u'api-ms-win-core-util-l1-1-0.dll'),
(1983068, 10607, 19648, 1, 'b', u'api-ms-win-crt-conio-l1-1-0.dll'),
(1993675, 11729, 22720, 1, 'b', u'api-ms-win-crt-convert-l1-1-0.dll'),
(2005404, 10429, 19136, 1, 'b', u'api-ms-win-crt-environment-l1-1-0.dll'),
(2015833, 11063, 20672, 1, 'b', u'api-ms-win-crt-filesystem-l1-1-0.dll'),
(2026896, 10584, 19648, 1, 'b', u'api-ms-win-crt-heap-l1-1-0.dll'),
(2037480, 10540, 19136, 1, 'b', u'api-ms-win-crt-locale-l1-1-0.dll'),
(2048020, 13628, 27840, 1, 'b', u'api-ms-win-crt-math-l1-1-0.dll'),
(2061648, 10654, 19648, 1, 'b', u'api-ms-win-crt-process-l1-1-0.dll'),
(2072302, 11901, 23232, 1, 'b', u'api-ms-win-crt-runtime-l1-1-0.dll'),
(2084203, 12357, 24768, 1, 'b', u'api-ms-win-crt-stdio-l1-1-0.dll'),
(2096560, 12530, 24768, 1, 'b', u'api-ms-win-crt-string-l1-1-0.dll'),
(2109090, 11174, 21184, 1, 'b', u'api-ms-win-crt-time-l1-1-0.dll'),
(2120264, 10601, 19136, 1, 'b', u'api-ms-win-crt-utility-l1-1-0.dll'),
(2130865, 485, 1035, 1, 'b', u'bob_test_1.exe.manifest'),
(2131350, 74629, 189952, 1, 'b', u'pyexpat.pyd'),
(2205979, 1637554, 3938304, 1, 'b', u'python35.dll'),
(3843533, 9127, 19968, 1, 'b', u'select.pyd'),
(3852660, 446584, 982720, 1, 'b', u'ucrtbase.dll'),
(4299244, 341035, 865792, 1, 'b', u'unicodedata.pyd'),
(4640279,
0,
0,
0,
'o',
u'pyi-windows-manifest-filename bob_test_1.exe.manifest'),
(4640279, 197523, 761033, 1, 'x', u'base_library.zip'),
(4837802, 1198430, 1198430, 0, 'z', u'out00-PYZ.pyz')]
?
Thanks