Double sla sh строка становится одиночной sla sh внутри функции - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь прочитать файл с помощью команды 'exe c' в python. Поэтому я определяю функцию, известную как importing_data. Функция принимает входной путь к папке, из которой необходимо прочитать данные.

Путь печати идет с двойным обратным символом sh.

print(path) 

'C: \ \ Users \\ evarxxx \\ Desktop \\ Raw_Data '

def importing_data(path,var):
    data_file_list=list_of_files(path)
    print(data_file_list)
    Data_Raw=[0]*len(data_file_list)
    order={'Aug':0,'Sep':1,'Oct':2,'Nov':3,'Dec':4,'Jan':5,'Feb':6,'Mar':7}
    data_so=pd.DataFrame()
    for i in data_file_list:
        mon= i.split(".")[0][:3]
        if(mon=='Aug'):
            continue
        ext=i.split('.')[1]
        dictt={'csv':'pd.read_csv','xlsx':'pd.read_excel'}

        command=dictt[ext]+"('"+path+'\\'+i+"')"
        print(command) 
        return command
        temp=exec(command)
        return temp

Но когда я печатаю путь внутри функции, он идет с одним backsla sh.

pd.read_csv ('C: \ Users \ evarxxx \ Рабочий стол \ Офисная работа \ Время сегментированного свинца \ New_Data \ NewTechniques \ Raw_DataDe December.csv')

И с приведенной ниже ошибкой: -

( ошибка Unicode) код 'unicodeescape' c не может декодировать байты в позиции 2-3: усеченный \ UXXXXXXXX escape

(Здесь data_file_list = ['August.xlsx', 'December.csv'])

Я даже пытался заменить

path = path.replace("\\", '\\\\');
command=dictt[ext]+"('"+path+r'\\'+i+"')"

Но в этом случае в temp ни один тип не читается вместо фрейма данных

Здесь у меня два вопроса

1) Почему double backsla sh по-разному печатается внутри и снаружи функции

2) Как читать с помощью e xe c файлы csv внутри папки

Ответы [ 3 ]

1 голос
/ 24 апреля 2020

Можете ли вы показать определение функции list_of_files ()?

Я бы посоветовал вам перебирать ваши файлы следующим образом:

import os

def list_of_files(path):
    fileList = list()
    for filename in os.listdir(path):
        fileList.append(os.path.join(path,filename))
    return fileList
0 голосов
/ 23 апреля 2020
  1. Как и в do c exe c работает следующим образом: Если это строка, строка анализируется как набор операторов Python, которые затем выполняются , Следовательно, различное поведение внутри и снаружи exe c.

  2. exe c ничего не возвращает, поэтому вы должны инициализироваться в команде, переданной exe c

    exec('''df = pd.read_csv('\your\file\path.csv')''')

0 голосов
/ 23 апреля 2020
  1. Я рекомендую всегда использовать os.path.join() при открытии файлов внутри каталогов.
  2. Чтение 1

Вот пример:

import os

path = 'C:\\Users\\evarxxx\\Desktop\\Raw_Data'
nested_dir = 'New_Data'
filename = 'Raw_DataDecember.csv'
df = pd.read_csv(os.path.join(path, nested_dir, filename)

также , для получения пути к текущему рабочему каталогу (где находится ваш код) используйте os.getcwd() - это хороший способ получить точку отсчета, где находятся ваши файлы.

...