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
