如何使用python和pandas减少使用for循环和条件的.py代码
我想问一个简单的问题:如何使用python和pandas减少使用for循环和条件的.py代码,python,pandas,Python,Pandas,我想问一个简单的问题: 第一个问题是如何在不声明文件名的情况下读取txt或任何文件,例如,我将在C:\Users\mahmoud\PycharmProjects\text\u files中创建一个ceratin路径,该路径文件夹包含我要转换的所有文本文件,因此我想创建一个类似的循环,在路径中循环,并将所有此类文件转换为csv到excel 2.如何减少如下代码,因为此代码与第一个问题有关 import pandas as pd dataf_gsm_car_txt = 'gsmcarrier_mn
txt
或任何文件
,例如,我将在C:\Users\mahmoud\PycharmProjects\text\u files
中创建一个ceratin路径,该路径文件夹包含我要转换的所有文本
文件,因此我想创建一个类似的循环,在路径中循环,并将所有此类文件转换为csv
到excel
import pandas as pd
dataf_gsm_car_txt = 'gsmcarrier_mnm.txt'
dataf_gsm_rel_txt = 'gsmrelation_mnm.txt'
class push_all_to_csv(object):
def push_gsmcarrier(self):
dataf_gsm_car_txt_df = pd.read_csv(dataf_gsm_car_txt, sep=';')
dataf_gsm_car_df_column_index = list(dataf_gsm_car_txt_df.columns)
dataf_gsm_car_txt_df.reset_index(inplace=True)
dataf_gsm_car_txt_df.drop(columns=dataf_gsm_car_txt_df.columns[-1], inplace=True)
dataf_gsm_car_df_column_index = dict(zip(list(dataf_gsm_car_txt_df.columns), dataf_gsm_car_df_column_index))
dataf_gsm_car_txt_df.rename(columns=dataf_gsm_car_df_column_index, inplace=True)
dataf_gsm_car_txt_df.to_excel('gsmcarrier_mnm.xlsx', 'Sheet1', index=False)
def push_gsmrelation(self):
dataf_gsm_txt_df = pd.read_csv(dataf_gsm_rel_txt, sep=';')
dataf_gsm_rel_df_column_index = list(dataf_gsm_txt_df.columns)
dataf_gsm_txt_df.reset_index(inplace=True)
dataf_gsm_txt_df.drop(columns=dataf_gsm_txt_df.columns[-1], inplace=True)
dataf_gsm_rel_df_column_index = dict(zip(list(dataf_gsm_txt_df.columns), dataf_gsm_rel_df_column_index))
dataf_gsm_txt_df.rename(columns=dataf_gsm_rel_df_column_index, inplace=True)
dataf_gsm_txt_df.to_excel('gsmrelation_mnm.xlsx', 'Sheet1', index=False)
def push_umtscarrier(self):
dataf_umts_car_txt = 'umtscarrier_mnm.txt'
dataf_umts_car_txt_df = pd.read_csv(dataf_umts_car_txt, sep=';')
dataf_umts_car_df_column_index = list(dataf_umts_car_txt_df.columns)
dataf_umts_car_txt_df.reset_index(inplace=True)
dataf_umts_car_txt_df.drop(columns=dataf_umts_car_txt_df.columns[-1], inplace=True)
dataf_umts_car_df_column_index = dict(zip(list(dataf_umts_car_txt_df.columns), dataf_umts_car_df_column_index))
dataf_umts_car_txt_df.rename(columns=dataf_umts_car_df_column_index, inplace=True)
dataf_umts_car_txt_df.to_excel('umtscarrier_mnm.xlsx', 'Sheet1', index=False)
def push_gsmrelation(self):
dataf_umts_rel_txt = 'umtsrelation_mnm.txt'
dataf_umts_txt_df = pd.read_csv(dataf_umts_rel_txt, sep=';')
dataf_umts_rel_df_column_index = list(dataf_umts_txt_df.columns)
dataf_umts_txt_df.reset_index(inplace=True)
dataf_umts_txt_df.drop(columns=dataf_umts_txt_df.columns[-1], inplace=True)
dataf_umts_rel_df_column_index = dict(zip(list(dataf_umts_txt_df.columns), dataf_umts_rel_df_column_index))
dataf_umts_txt_df.rename(columns=dataf_umts_rel_df_column_index, inplace=True)
dataf_umts_txt_df.to_csv('umtsrelation_mnm.csv')
def get_push_all_to_csv():
return push_all_to_csv()
我只需要使用pandas
函数来构造这样的代码,比如to_csv
,“to_excel”,where
,isin
。。。。许多功能和一些sql
查询作为代码结构设计的支持,正如我想象的,应该如下所示:
database_connection/
│
├── .conncetion.py
to_sql/
│
├── .file_tosql_1.py
├── .file1_tosql_.py
to_csv/
├── .file1_tosql_.py
├── .file1_tosql_.py
assets/
Main_App.py
因为我找到了一种通过以下代码减少方法
调用的方法:
#Method that call in the methods which in the class
def call_all(obj, *args, **kwargs):
for name in dir(obj):
attribute = getattr(obj, name)
if ismethod(attribute):
attribute(*args, **kwargs)
有什么建议吗
编辑
编辑2:
错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.2\plugins\python-ce\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
pydev_imports.execfile(filename, global_vars, local_vars) # execute the script
File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.2\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/haroo501/PycharmProjects/ToolUpdated/txt_to_csv/convert_to_csv.py", line 64, in <module>
pd.read_csv(currentFile, delimiter = "\t")
File "C:\Users\haroo501\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\io\parsers.py", line 676, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Users\haroo501\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\io\parsers.py", line 448, in _read
parser = TextFileReader(fp_or_buf, **kwds)
File "C:\Users\haroo501\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\io\parsers.py", line 880, in __init__
self._make_engine(self.engine)
File "C:\Users\haroo501\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\io\parsers.py", line 1114, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "C:\Users\haroo501\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\io\parsers.py", line 1891, in __init__
self._reader = parsers.TextReader(src, **kwds)
File "pandas\_libs\parsers.pyx", line 532, in pandas._libs.parsers.TextReader.__cinit__
pandas.errors.EmptyDataError: No columns to parse from file
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.2\plugins\python ce\helpers\pydev\\u pydev_bundle\pydev_umd.py”,第197行,在运行文件中
pydev_imports.execfile(文件名、全局变量、本地变量)#执行脚本
文件“C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.2\plugins\python ce\helpers\pydev\\u pydev\u imps\\u pydev\u execfile.py”,第18行,在execfile中
exec(编译(内容+“\n”,文件,'exec'),全局,loc)
文件“C:/Users/haroo501/PycharmProjects/ToolUpdated/txt_to_csv/convert_to_csv.py”,第64行,在
pd.read_csv(当前文件,分隔符=“\t”)
文件“C:\Users\haroo501\AppData\Local\Programs\Python38\lib\site packages\pandas\io\parsers.py”,第676行,在解析器中
返回读取(文件路径或缓冲区,kwds)
文件“C:\Users\haroo501\AppData\Local\Programs\Python38\lib\site packages\pandas\io\parsers.py”,第448行,已读
parser=TextFileReader(fp_或_buf,**kwds)
文件“C:\Users\haroo501\AppData\Local\Programs\Python38\lib\site packages\pandas\io\parsers.py”,第880行,在u init中__
自制发动机(自制发动机)
文件“C:\Users\haroo501\AppData\Local\Programs\Python38\lib\site packages\pandas\io\parsers.py”,第1114行,在“make\u引擎”中
self.\u engine=CParserWrapper(self.f,**self.options)
文件“C:\Users\haroo501\AppData\Local\Programs\Python38\lib\site packages\pandas\io\parsers.py”,第1891行,在u init中__
self.\u reader=parsers.TextReader(src,**kwds)
文件“pandas\\ libs\parsers.pyx”,第532行,在pandas.\u libs.parsers.TextReader.\uu\cinit中__
pandas.errors.EmptyDataError:没有要从文件中分析的列
问题1
import os
import glob
path = r"D:\txtFiles"
pathPat = os.path.join(path,"*.txt")
all_file_name = glob.glob(pathPat)
for fileName in all_file_name:
with open(fileName) as currentFile:
#do somthing with the file
问题1
import os
import glob
path = r"D:\txtFiles"
pathPat = os.path.join(path,"*.txt")
all_file_name = glob.glob(pathPat)
for fileName in all_file_name:
with open(fileName) as currentFile:
#do somthing with the file
您可以使用
glob
库访问上述文件。并使用单个函数迭代所有文件并将其保存回
更新:我正在使用path.split(“.”[:-1]
从原始名称创建一个.xlsx文件名,但是这将返回字符串列表,因此导致错误。您可以使用str.replace
替换文件的扩展名
导入操作系统
导入glob
作为pd进口熊猫
def清洁(路径):
df=pd.read_csv(路径,sep=';')
cols=df.columns.tolist()
df=df.reset_index().drop(columns=df.columns[-1])
new_cols=dict(zip(列表(df.列),cols))
df=df.rename(列=新列)
#这里有新的变化
新建_文件_path=path.replace(“.txt”,“.xlsx”)
打印(新文件路径)
df.to_excel(路径,sheet\u name=“Sheet1”,索引=False)
def main():
path=r“D:\txtFiles”
pathPat=os.path.join(路径“*.txt”)
all_file_name=glob.glob(pathPat)
对于所有文件名中的文件路径:
打印(文件路径)
清除(文件路径)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
您可以使用glob
库访问上述文件。并使用单个函数迭代所有文件并将其保存回
更新:我正在使用path.split(“.”[:-1]
从原始名称创建一个.xlsx文件名,但是这将返回字符串列表,因此导致错误。您可以使用str.replace
替换文件的扩展名
导入操作系统
导入glob
作为pd进口熊猫
def清洁(路径):
df=pd.read_csv(路径,sep=';')
cols=df.columns.tolist()
df=df.reset_index().drop(columns=df.columns[-1])
new_cols=dict(zip(列表(df.列),cols))
df=df.rename(列=新列)
#这里有新的变化
新建_文件_path=path.replace(“.txt”,“.xlsx”)
打印(新文件路径)
df.to_excel(路径,sheet\u name=“Sheet1”,索引=False)
def main():
path=r“D:\txtFiles”
pathPat=os.path.join(路径“*.txt”)
all_file_name=glob.glob(pathPat)
对于所有文件名中的文件路径:
打印(文件路径)
清除(文件路径)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
如何使用文件名然后我使用了类似于fileName.to_csv()
的东西,但如果它是csv,则不起作用。如果不需要,请使用df=pd.read_csv(currentFile)或“\t”使用pd.read_csv(currentFile,delimiter=“\t”)您知道如何解决此错误:PermissionError:[Errno 13]权限被拒绝:“C:\\Users\\haroo501\\PycharmProjects\\ToolUpdated\\data\u feed”
有几种可能,在运行脚本之前先关闭文件,它已经关闭,只是一个路径文件夹。。。。我想我必须授予权限或其他什么我如何使用文件名,然后我使用了类似于fileName.to\u csv()
的东西,但如果是csv,则无法使用df=pd.read\u csv(currentFile)(当前文件)如果您不想要的话),“\t”使用pd.read\u csv(当前文件,分隔符=“\t”)您知道如何解决此错误:PermissionError:[Errno 13]权限被拒绝:
import os
import glob
path = r"D:\txtFiles"
pathPat = os.path.join(path,"*.txt")
all_file_name = glob.glob(pathPat)
for fileName in all_file_name:
with open(fileName) as currentFile:
#do somthing with the file