I have dataframe with missing images in images dir
that contians labels
data with 2 columns (file_name,text
) after reading labels.txt
file , My working directory look like :
$ tree
.
├── sample
│ ├------- labels.txt
│ │------- imgs
│ │ └───├── 0.png
│ │ └── 3.png
│ │ └── 4.png
│ │ └── 5.png
│ │ └── 6.png
│ │ └── 7.png
│ │ └── 8.png
│ │ └── 10.png
The labels.txt
file :
0.jpg Elégedetlenek az emberek a közoktatással? Belföld - Magyarország hírei
1.jpg Szeged - delmagyar.hu Delmagyar.hu 24 óra Szórakozás Sport Programok
2.jpg Állás Ingatlan Hárommilliárdot költenek a ,,boldog békeidőket" idéző Öt
3.jpg órát dolgoztak a Szabadság úszóházon, mire Illatoznak is a
4.jpg kis harangok, de csak közelről érezni - Madonna tavaly
5.jpg még meg tudta akadályozni, idén viszont Egy tálca zsíros
6.jpg kenyér - Milyen gyermekkora volt Belföld - Magyarország hírei
7.jpg Elégedetlenek az emberek a közoktatással? Elégedetlenek az emberek a
8.jpg közoktatással? Független Hírügynökség Az emberek nagyobb része elégedetlen a
9.jpg magyarországi közoktatás minőségével. Sokan nem tartják megfelelően felkészültnek a
10.jpg pedagógusokat és szükségesnek tartanák a tanárok gyakori, elsősorban pszichológiai
So I wrote small script to read text file using data frame :
import pandas as pd
from pathlib import Path
path = "./sample/"
df = pd.read_csv(f'{path}labels.txt',
header=None,
delimiter=' ',
encoding="utf8",
error_bad_lines=False,
engine='python'
)
df.rename(columns={0: "file_name", 1: "text"}, inplace=True)
print(df.head(11))
the output after reading :
I am trying to keep only rows that has image in image dir if the dir not exist drop or skip it but after writing functions below it only drop last row (for missing image) for new dataframe
def is_dir_exist(filename):
path = "/home/ngyongyossy/mohammad/OCR_HU_Tra2022/GPT-2_Parallel/process/sample/"
path_to_file = f'{path}imgs/'+ filename # df['file_name'][idx] # 'readme.txt'
path = Path(path_to_file)
# print(path.is_file())
return path.is_file()
for idx in range(len(df)):
# print(df['file_name'][idx])
print(is_dir_exist(df['file_name'][idx]))
if not is_dir_exist(df['file_name'][idx]):
update_df = df.drop(df.index[idx])
print(update_df.head(11))
What I got : file_name text
0 0.jpg Elégedetlenek az emberek a közoktatással? Belf...
1 1.jpg Szeged - delmagyar.hu Delmagyar.hu 24 óra Szór...
2 2.jpg Állás Ingatlan Hárommilliárdot költenek a ,,bo...
3 3.jpg órát dolgoztak a Szabadság úszóházon, mire Ill...
4 4.jpg kis harangok, de csak közelről érezni - Madonn...
5 5.jpg még meg tudta akadályozni, idén viszont Egy tá...
6 6.jpg kenyér - Milyen gyermekkora volt Belföld - Mag...
7 7.jpg Elégedetlenek az emberek a közoktatással? Elég...
8 8.jpg közoktatással? Független Hírügynökség Az ember...
10 10.jpg pedagógusokat és szükségesnek tartanák a tanár...
But My Expactation is to keep only rows label with existing image folder:
file_name text
0 0.jpg Elégedetlenek az emberek a közoktatással? Belf...
3 3.jpg órát dolgoztak a Szabadság úszóházon, mire Ill...
4 4.jpg kis harangok, de csak közelről érezni - Madonn...
5 5.jpg még meg tudta akadályozni, idén viszont Egy tá...
6 6.jpg kenyér - Milyen gyermekkora volt Belföld - Mag...
7 7.jpg Elégedetlenek az emberek a közoktatással? Elég...
8 8.jpg közoktatással? Független Hírügynökség Az ember...
10 10.jpg pedagógusokat és szükségesnek tartanák a tanár...
import pandas as pd
from pathlib import Path
path = "/sample/"
df = pd.read_csv(f'{path}labels.txt',
header=None,
delimiter=' ',
encoding="utf8",
error_bad_lines=False,
engine='python'
)
df.rename(columns={0: "file_name", 1: "text"}, inplace=True)
print(df.head(11))
def is_dir_exist(filename):
path = "/sample/"
path_to_file = f'{path}imgs/'+ filename
path = Path(path_to_file)
return path.is_file()
def drop_row(idx):
new_df = df.drop(df.index[idx])
return new_df
list_fn = []
for idx in range(len(df)):
# print(df['file_name'][idx])
print(is_dir_exist(df['file_name'][idx]))
if not is_dir_exist(df['file_name'][idx]):
# new_df = drop_row(idx)
list_fn.append(df['file_name'][idx])
for i in list_fn:
df.drop(df[df['file_name'] == i ].index, inplace = True)
print(list_fn)
print(df.head(11))