Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python和pandas减少使用for循环和条件的.py代码_Python_Pandas - Fatal编程技术网

如何使用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
  • 2.如何减少如下代码,因为此代码与第一个问题有关

    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