79 lines
1.9 KiB
Python
79 lines
1.9 KiB
Python
|
|
import csv
|
||
|
|
import os
|
||
|
|
from tkinter import Tk, filedialog
|
||
|
|
|
||
|
|
def merge_csv_files(input_files, output_file):
|
||
|
|
file_contents = {}
|
||
|
|
header = ['First Column']
|
||
|
|
|
||
|
|
# Read all selected CSV files
|
||
|
|
for filepath in input_files:
|
||
|
|
filename = os.path.basename(filepath)
|
||
|
|
with open(filepath, 'r') as file:
|
||
|
|
csv_reader = csv.reader(file)
|
||
|
|
next(csv_reader) # Skip the header row
|
||
|
|
for row in csv_reader:
|
||
|
|
try:
|
||
|
|
value = float(row[0])
|
||
|
|
if 300 <= value <= 700: # Check if the value is within the range
|
||
|
|
if row[0] not in file_contents:
|
||
|
|
file_contents[row[0]] = {}
|
||
|
|
|
||
|
|
file_contents[row[0]][filename] = row[1]
|
||
|
|
|
||
|
|
if filename not in header:
|
||
|
|
header.append(filename)
|
||
|
|
except ValueError:
|
||
|
|
pass
|
||
|
|
|
||
|
|
# Write the merged contents into the output file
|
||
|
|
with open(output_file, 'w', newline='') as file:
|
||
|
|
csv_writer = csv.writer(file)
|
||
|
|
csv_writer.writerow(header)
|
||
|
|
|
||
|
|
for key, values in file_contents.items():
|
||
|
|
row = [key]
|
||
|
|
|
||
|
|
for filename in header[1:]:
|
||
|
|
row.append(values.get(filename, ''))
|
||
|
|
|
||
|
|
csv_writer.writerow(row)
|
||
|
|
|
||
|
|
print(f'Merged CSV files saved to: {output_file}')
|
||
|
|
|
||
|
|
|
||
|
|
def extract_data_from_merged_file(merged_file):
|
||
|
|
data = []
|
||
|
|
with open(merged_file, 'r') as file:
|
||
|
|
csv_reader = csv.reader(file)
|
||
|
|
header = next(csv_reader) # Get the header row
|
||
|
|
for i, row in enumerate(csv_reader, start=1):
|
||
|
|
if i in (365, 750):
|
||
|
|
extracted_row = []
|
||
|
|
for j, value in enumerate(row[1:], start=1):
|
||
|
|
column_name = header[j]
|
||
|
|
extracted_row.append((column_name, value))
|
||
|
|
data.append(extracted_row)
|
||
|
|
return data
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
# Create a file dialog to select multiple CSV files
|
||
|
|
root = Tk()
|
||
|
|
root.withdraw()
|
||
|
|
input_files = filedialog.askopenfilenames(title='Select CSV files', filetypes=(('CSV files', '*.csv'),))
|
||
|
|
|
||
|
|
# Ensure at least one file is selected
|
||
|
|
if input_files:
|
||
|
|
# Specify the output file path
|
||
|
|
output_file = 'merged.csv'
|
||
|
|
|
||
|
|
merge_csv_files(input_files, output_file)
|
||
|
|
|
||
|
|
extracted_data = extract_data_from_merged_file(output_file)
|
||
|
|
|
||
|
|
for row in extracted_data:
|
||
|
|
print(row)
|
||
|
|
else:
|
||
|
|
print('No files selected. Program will exit.')
|