I'm creating an application that will parse text files into a different text file and create an excel spreadsheet from the new text file it has created. I have gotten everything working apart from being able to create the directory. I need to create the directory manually even though I am using os.mkdir. What am I doing wrong? I started learning python a few days ago so help would be appreciated. Here is my code:
import os import tkinter as tk from tkinter import ttk import csv import openpyxl class dataFormatter(): def SelectFile(self): drive = self.DriveField.get() availableDirs = os.listdir(drive + '/') self.DirField = ttk.Combobox(self.mainframe, values=availableDirs) self.DirField.grid(row=3, column=0) self.dirButton = ttk.Button(self.mainframe, text = 'Go', command = self.selectDataType) self.dirButton.grid(row= 3, column = 1) self.dirText = ttk.Label(self.mainframe, text='Select folder:', background='white', pad=10) self.dirText.grid(row=2, column=0) def selectDataType(self): driveDir = self.DirField.get() drive = self.DriveField.get() dataType = os.listdir(f'{drive}/{driveDir}') self.textTypeField = ttk.Label(self.mainframe, text = 'Select data type:', background = 'white', pad = 10) self.textTypeField.grid(row = 4, column = 0) self.TypeField = ttk.Combobox(self.mainframe, values = dataType) self.TypeField.grid(row = 5, column = 0) self.TypeFieldButton = ttk.Button(self.mainframe, text = 'Format', command = self.formatData) self.TypeFieldButton.grid(row = 5, column = 1) def formatData(self): selectedDataType = self.TypeField.get() print(selectedDataType) selectedDrive = self.DriveField.get() selectedDir = self.DirField.get() readFileFullPath = f'{selectedDrive}/{selectedDir}/{selectedDataType}' newFile = (f'Y:/ENGINEERING/{selectedDir}/{selectedDataType}') fileList = os.listdir(f'{readFileFullPath}/') for file in fileList: writeFilePath = f'{newFile}/Text' writeFileFullPath = f'{writeFilePath}/Parsed_{selectedDataType}_{file}' if os.path.exists(writeFilePath): os.chdir(writeFilePath) else: os.mkdir(writeFilePath) with open (f'{readFileFullPath}/{file}', 'r') as readFile, open(writeFileFullPath, 'w') as writeFile: readFile = readFile.readlines() errorCount = 0 for line in readFile: line = line.strip() if line.find('ERROR') != -1: errorCount += 1 else: writeFile.write(f'{line}\n') writeFile.write(f'\nErrors: {errorCount}\n') writeFile.close() excelFile = file.replace('.txt', '.xlsx') xlsxFile = f'{newFile}/Excel/Parsed_{excelFile}' workbook = openpyxl.Workbook() worksheet = workbook.worksheets[0] with open(writeFileFullPath, 'r') as data: reader = csv.reader(data, delimiter = ' ') for row in reader: worksheet.append(row) workbook.save(xlsxFile) self.success_field = ttk.Label(self.mainframe, text = 'Formatting successful', background = 'white') self.success_field.grid(row = 6, column = 0, pady = 10) def __init__(self): drives = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] availableDrives = [] for x in range(0, 1): for y in drives: if os.path.exists(y + ':/') == True: if y + ':' not in drives: availableDrives.append(y + ':') self.root = tk.Tk() self.root.geometry('350x250') self.root.title('Data Formatter') self.mainframe = tk.Frame(self.root, background = 'white') self.mainframe.pack(fill = 'both', expand = True) self.driveText = ttk.Label(self.mainframe, text = 'Select drive: ', background = 'white', pad = 10) self.driveText.grid(row=0, column=0, padx = 70) self.DriveField = ttk.Combobox(self.mainframe, values=availableDrives) driveButton = ttk.Button(self.mainframe, text='Go', command=self.SelectFile) driveButton.grid(row=1, column=1) self.DriveField.grid(row = 1, column = 0) self.root.mainloop() return if __name__ == '__main__': dataFormatter()and here is the error and terminal output:
Error: File "C:\Users\christopher.donnelly\PycharmProjects\HelloWorld\pythonProject\readWriteDataLogging.py", line 42, in formatData
os.mkdir(writeFilePath)
FileNotFoundError: [WinError 3] The system cannot find the path specified: 'Y:/ENGINEERING/DataLogging/Ozone_Meter/Text'
Ozone_Meter
Process finished with exit code 0