कॉपी फ़ाइल - लूप पायथन के लिए - पायथन, loops, प्रतिलिपि

नमस्कार,

मेरे पास यहां कुछ कोड है जिसका प्रतिलिपि बनाना है200 सीएसवी स्रोत फ़ोल्डर से गंतव्य क्षेत्र में "सेक्टर" के आधार पर गंतव्य फ़ोल्डर्स में हैं। वे क्षेत्र जो वे हैं "प्रतीक सूची" के माध्यम से पहचाने जाते हैं जिसमें टिकर्स की सूची वाले सीएसवी होते हैं। कोड के लिए काम करता है अधिकांश भाग यह छोड़कर कि यह टिकर्स की सूची ले रहा हैप्रतीकों की सूची में अंतिम सीएसवी में और उन सभी सीएसवी को सभी गंतव्य फ़ोल्डरों में कॉपी करना। मूल रूप से मुझे इसके नीचे लूप के लिए पहले के साथ लूप के लिए पहली बार जोड़ना होगा, लेकिन मुझे ऐसा करने में कठिनाई हो रही है। कोई भी टिप्पणी बहुत अधिक है की सराहना की।

import os,sys,shutil
import glob
import pandas as pd

source_dir =  "C:TS"
dest_dir = "C:TSCombinedGroupsCross Asset Class"
#dest_dir = "C:TSCombinedcopytest"
base = "C:TSCombinedGroups"

dest_dirlist = (base +"/Cross Asset Class", base+"/Bonds", base + "/Commodities", 
base + "/Countries", base + "/Currencies", base + "/Industry Sectors", base + "/Segments and Styles", 
base + "/Us Sectors", base + "Volatilities")
print(dest_dirlist)

symbolslist = (base+"/Cross Asset Class.csv", base+"/Bonds.csv",base+"/Commodities.csv" 
,base+"/Currencies.csv", base+"/Industry Sectors.csv", base+"/Segments and Styles.csv", 
base+"/US Sectors.csv")


for file in symbolslist:
print(file)
df_symbolslist = pd.read_csv(file)
print(df_symbolslist)


for ticker_file in glob.glob(os.path.join(source_dir, "*.csv*")):
for ticker in df_symbolslist["Ticker"]:
print(ticker)
if ticker in ticker_file:
for path in dest_dirlist:
shutil.copy(ticker_file, path)
print(ticker + " File Copied")

आपका समय देने के लिए आपका बहुत बहुत धन्यवाद।

उत्तर:

जवाब के लिए 0 № 1

अगर मैं सही ढंग से समस्या को समझता हूं तो मुझे लगता है कि आपको थोड़ा अलग दृष्टिकोण का पालन करना चाहिए। आप एक बना सकते हैं dict जो टिकर्स को संपत्ति वर्गों की सूची में चिह्नित करता है, जो इससे संबंधित हैं। फिर आप फ़ाइलों को कॉपी करने के लिए मानचित्र बनाते हैं। मुझे नहीं लगता कि पांडा यहां मदद करता है - आप मानक सीएसवी मॉड्यूल का उपयोग कर पंक्ति से मानचित्र पंक्ति बना सकते हैं।

मैंने इस कोड का परीक्षण नहीं किया है क्योंकि मेरे पास उचित डेटा सेट नहीं है, लेकिन ऐसा करने पर विचार करें:

import os,sys,shutil
import glob
import csv
import collections

source_dir =  r"C:TS"
dest_dir = r"C:TSCombinedGroupsCross Asset Class"
#dest_dir = r"C:TSCombinedcopytest"
base = r"C:TSCombinedGroups"

# asset classes of interest
asset_classes = ("Cross Asset Class", "Bonds", "Commodities",
"Countries", "Currencies", "Industry Sectors", "Segments and Styles",
"Us Sectors", "Volatilities")

# asset class directories indexed by class
dest_dir_index = {asset_class.upper():os.path.join(base, asset_class)
for asset_class in asset_classes}
print(dest_dir_index)

# make sure destination dirs exist
for dir_name in dest_dir_index.values():
if not os.path.isdir(dir_name):
os.mkdir(dir_name)

# dict that creates key:[classes...] item when first accessed, used to keep
# list of asset classes for each ticker symbol.
ticker_to_class_index = collections.defaultdict(list)

for asset_class in asset_classes:
symbolcsv = "{}.csv".format(os.path.join(base, asset_class))
print(symbolcsv)
with open(symbolcsv, newline="") as fp:
reader = csv.reader(fp)
next(fp) # skip header
for sectors, ticker in reader:
ticker_to_class_index[ticker.upper()].append(asset_class)

# split ticker out of csv filenames and copy file to all asset classes
# mapped for that ticker.
for ticker_file in glob.glob(os.path.join(source_dir, "*.csv*")):
ticker = os.path.splitext(os.path.basename(ticker_file)).upper()
print(ticker)
for asset_class in ticker_to_class_map[ticker.upper()]:
dest_dir = dest_dir_index[asset_class]
shutil.copy(ticker_file, dest_dir)
print("{} copied to {}".format(ticker_file, dest_dir))

संबंधित सवाल
सबसे लोकप्रिय