Мне было интересно, есть ли способ, который выводит имена файлов условно на основе нескольких импортированных CSV-файлов. Моя процедура:
- Установить мой путь.
- Получить все CSV-файлы по этому пути.
- Импортировать все эти CSV-файлы, захватывая только номера каждого файла имена и сохраните это в 'new_column'.
- Проверьте количество столбцов каждого файла и хотите исключить файлы, которые не имеют 10 столбцов (получено с использованием
shape[1]
). - Теперь, Я хочу распечатать фактические имена файлов, которые не имеют 10 столбцов -> Я застрял здесь.
У меня нет проблем до номера 4. Однако я я застрял на 5. Как мне добиться 5.?
# setting my path
path = r'my\path'
# make a function that grabs all csv files in my path
all_files = glob.glob(path + "/*.csv")
# grab the numeric part of each file
def get_numbers_from_filename(filename):
return re.search(r'\d+', filename).group(0)
# import all the actual csv files and add a 'new_column' column based on the "get_numbers_from_filename" function
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
df['new_column'] = get_numbers_from_filename(filename)
li.append(df)
# check frequency of column numbers for each file using a frequency table
result = []
for lis in li:
result.append(lis.shape[1])
# make this a dataframe
result = pd.DataFrame(result, columns = ['shape'])
# actual checking step
result['shape'].value_counts()
# grab only shape == 10 files to correctly concatenate
result = []
for lis in li:
if lis.shape[1] == 10:
result.append(lis)
## my solution for part 5:
# print and save all the paths of my directory
path = os.listdir(path)
# grab file names if columns numbers are not 10
result3 = []
for paths in path:
for list in li:
if lis.shape[1] != 10:
result3.append(paths)
мое решение дает пустую строку []