import multiprocessing,os,csv,re
def read_all_csv_file(csv_file_root_path):
file_list = os.listdir(csv_file_root_path)
return file_list
def write_csv(new_file_name,Dictfiles):
print("新建",new_file_name,"csv文件")
with open(new_file_name,'w',newline='') as f:
print("开始写入数据>>>>>>>>>>>>>>>>>>>>")
print("写入表头字段>>>>>>>>>>>>>>>>>>>>")
headers = ['ShipName', 'IMO', 'ShipTypeEN', 'Speed', 'Lon', 'Lat', 'Dest', 'ETA', 'UnixTime', 'Lon_d', 'Lat_d']
writer = csv.DictWriter(f,fieldnames=headers)
writer.writeheader()
print("表头字段写入完毕----------------")
print("开始写入表体数据>>>>>>>>>>>>>>>>>>>>")
writecount = 0
sumcount = len(Dictfiles)
print("表体数据共计", sumcount, "条")
for Dictfile in Dictfiles:
writecount +=1
print("当前写入第", writecount,"/",sumcount, "条")
# print(">>>>>This is Dictfile>>>>>", Dictfile)
writer.writerow(Dictfile)
def OrderDictRow_To_Dict(item):
directItem = {}
directItem["ShipName"]=item["ShipName"]
directItem["IMO"]=item["IMO"]
directItem["ShipTypeEN"]=item["ShipTypeEN"]
directItem["Speed"]=item["Speed"]
directItem["Lon"]=item["Lon"]
directItem["Lat"]=item["Lat"]
directItem["Dest"]=item["Dest"]
directItem["UnixTime"] = item["UnixTime"]
directItem["ETA"]=item["ETA"]
directItem["Lon_d"]=item["Lon_d"]
directItem["Lat_d"]=item["Lat_d"]
return directItem
def range_dect(lat,lon):
lat_N: float = 40.933
lon_E: float = 122.133
lat_S: float = 37.117
lon_W: float = 117.55
if lat<lat_N and lat>lat_S:
if lon<lon_E and lon>lon_W:
return True
else:
return False
else:
return False
def GeoCoord_convert_du2decimal(location):
location = str(location)
location_list = re.split('[° ′]',location)
du = float(location_list[0])
if len(location_list)>2:
fen =float(location_list[1])
fen = fen/60
else:
fen = 0
GeoCoord_decimal: float = du+fen
return GeoCoord_decimal
def Read_Judge_Write_CSV(csv_file_path,target_filepath):
print(">>>>>当前子进程的编号为:",os.getpid())
print(">>>>>当前父进程的编号为:",os.getppid())
print("Starting function>>>>>Read_Judge_Write_CSV")
print("READING CSV FILE NOW:\n》",csv_file_path)
result_CSV_DictRow = []
with open(csv_file_path, 'r', encoding='gbk', errors='ignore') as f:
csv_Dictreader = csv.DictReader(x.replace('\0', '') for x in f)
next(csv_Dictreader)
Not_In_BoHai_count = 0
In_BoHai_count = 0
print(">>>>>>>>>>Judging whether it is in BoHai area>>>>>>>>>>")
for OrderDictrow in csv_Dictreader:
lat = GeoCoord_convert_du2decimal(OrderDictrow["Lat"])
lon = GeoCoord_convert_du2decimal(OrderDictrow["Lon"])
Is_in_BoHai = range_dect(lat, lon)
if Is_in_BoHai:
In_BoHai_count = In_BoHai_count + 1
Dict_Row = OrderDictRow_To_Dict(OrderDictrow)
result_CSV_DictRow.append(Dict_Row)
else:
Not_In_BoHai_count = Not_In_BoHai_count + 1
print("--------------------------------Judgement finished--------------------------------")
print(">>>>>>>>>>>>>>>>当前CSV表单中在渤海范围内的数据如下(DictType)>>>>>>>>>>>>>>>>\n", result_CSV_DictRow)
print(">>>>>>>>>>>>>>>>现在开始写入指定的文件夹中",target_filepath)
write_csv(target_filepath, result_CSV_DictRow)
print("\t共计", Not_In_BoHai_count, "条数据在渤海外\t", In_BoHai_count, "条数据在渤海范围内", "\n")
def MP(functionxx,c1,c2):
# ProcessingOBJ = multiprocessing.Process(target="任务名",name="进程名”系统会进行设置一般是Process00 Processing01 Processing02 依次类推,group="进程组“ 一般为None)
ProcessingOBJxx = multiprocessing.Process(target=functionxx,args=(c1,c2,))
ProcessingOBJxx.start()
if __name__ == '__main__':
source_CSV_root_path = "E:\\201907-2\\"
target_CSV_root_Path = "D:\\CSV_stage01\\"
CSV_fileNAME_list = read_all_csv_file(source_CSV_root_path)
CSV_file_count = len(CSV_fileNAME_list)
print("**********目录", source_CSV_root_path, "下共有", CSV_file_count, "个CSV文件**********")
# 已经读取的文件个数的计数器
count = 0
for CSV_fileNAME in CSV_fileNAME_list:
MP(Read_Judge_Write_CSV,source_CSV_root_path + CSV_fileNAME,target_CSV_root_Path + "new_CSV_" + CSV_fileNAME)
count = count + 1
print("——————————————————————————————已经开启", count, "/", CSV_file_count, "个进程用于读写处理CSV文件\n")
多线程
import threading
线程对象 = threading.Thread(target=任务名,args=(任务的参数一,任务的参数二,))
线程对象.setDaemon(True) #设置为守护主线程
线程对象.start()
多进程
import multiprocessing
进程对象 = multiprocessing.Process(target=任务,args=(任务的参数一,任务的参数二,))
进程对象.start()
多进程示例代码(多线程代码同理)
import multiprocessing,time
def task(c1,c2)
print(">>>>>当前子进程的编号为:",os.getpid())
print(">>>>>当前父进程的编号为:",os.getppid())
time.sleep(0.5)
print("当前进程参数一:",c1,"当前进程参数二:",c2)
print("子线程:",os.getpid(),"运行完成")
if __name__ == '__main__':
for i in range(10)
ProcessOBJ = multiprocessing.Process(target=task,args=(i+"-hello","world!",))
ProcessOBJ.start()
time.sleep(0.2)
print("主线程运行完成!")