Как запустить большой файл в пакетном режиме в Python - PullRequest
0 голосов
/ 30 сентября 2019

Ниже приведен код, который дает название дороги и тип дороги (шоссе, служебная дорога и т. Д.) С помощью Overpy API из файла csv. Каждый файл содержит много строк (295741 рядов), и когда я пытаюсь запустить код, он застревает примерно на 3000 строк.

Можно ли обработать файл партиями, чтобы можно было обработать весь файл?

import overpy
import pandas as pd
import time
import os


root = r'C:/Users/name/Documents/data'
fstem = 'sample'
fname = fstem+'.csv'
with open(os.path.join(root, fname)) as f:
    df = pd.read_csv(f)
#df.sort_values(by=['cvdt35_timestamp_s'],inplace=True)
print('# of records = '+str(len(df)))
api= overpy.Overpass()

queries = []
names = []
highways =[]
results = []
df['Name']=''
df['Highway'] =''

radius = 10
for row in df.index:                                                                                            
    query = ('way["highway"](around:{},{},{}); out body;').format(radius,df.gps_lat_dd.iloc[row], df.gps_lon_dd.iloc[row])
    queries.append(query)

for i in range(len(queries)):
    result = overpy.Result()
    query = queries[i]
    print(str(i)+', '+query)
    while True:
        try:
            result = api.query(query)
            break
        except overpy.exception.OverpassTooManyRequests:
            print('OverpassTooManyRequests')
            time.sleep(10*6)
        except overpy.exception.OverpassBadRequest:
            break
    if result:
        results.append(result)
    else:
        results.append('NAN')

#    results.append(result)

names = []
highways = []
for result in results:
    n1 = []
    h1 = []
    if type(result) is not str:
        for way in result.ways:
            name = way.tags.get("name", "n/a")
            n1.append(name)
            highway = way.tags.get("highway", "n/a")
            h1.append(highway)
        names.append(','.join(n1))
        highways.append(','.join(h1))
    else:
        names.append('')
        highways.append('')


df['Name']=names
df['Highway']=highways


fname = fstem+'_op.csv'
df.to_csv(os.path.join(root,fname),header=True,index=False)

Пример данных

RecordID    cvdt35_bus_r    GPS_Longitude_Degrees   GPS_Longitude_Minutes   GPS_Longitude_Min_dec   gps_lat_dd  gps_lon_dd  decimal
876 2   -83 10  0.8668  42.30721    -83.18111333    0.80899
877 2   -83 10  0.8668  42.30721167 -83.18111333    0.2055
878 2   -83 10  0.867   42.30721333 -83.18111667    0.56226
879 2   -83 10  0.8673  42.30721667 -83.18112167    0.27893
880 2   -83 10  0.8675  42.30722    -83.181125  0.8276
881 2   -83 10  0.8676  42.30722    -83.18112667    0.15108
882 2   -83 10  0.8676  42.30722167 -83.18112667    0.72718
883 2   -83 10  0.8675  42.30721667 -83.181125  0.89037
884 2   -83 10  0.8675  42.30721667 -83.181125  0.95866
885 2   -83 10  0.8675  42.30721667 -83.181125  0.95351
886 2   -83 10  0.8675  42.30721667 -83.181125  0.91884
887 2   -83 10  0.8675  42.30721667 -83.181125  0.97088
888 2   -83 10  0.8675  42.30721667 -83.181125  0.92894
889 2   -83 10  0.8675  42.30721667 -83.181125  0.92224
890 2   -83 10  0.8675  42.30721667 -83.181125  0.02049


Нет отображаемой ошибки,код просто останавливается. Заранее спасибо

...