If I were to create this from scratch I would have a "class" table so that the table of items has a many to many relationship
This implies that one item can be in many classes. However, your example CSV column list shows a class column right next to all the other item columns. This means each row in your CSV will represent only 1 relationship between an item and a class.
Therefore, if your data truly do have a many-to-many relationship between item and class, the only way I can see a CSV modelling this with the structure you gave, is for an item to be repeated on multiple rows - and each row specifies a different class.
If this conclusion is true, then realistically, you do need to model a many-to-many relationship using that intermediary table ... at least for your class information.
How your import will recognise that subsequent rows repeat the same items, and correctly insert the item once, the class once, and the intermediary joining table rows (several rows per item) - is a different question. However your intention to model as many-to-many using a middle table, is sound.
However, if your data (always) has only 1 item per row, then I struggle to see how the CSV can encapsulate information about a many-to-many relationship with class, as you describe. If that's the case, then you don't need the many-to-many middle table - just create your class table and reference it via a foreign key relationship on your item table.
Apart from the above specifics relating to the sample data structures you gave, the process of normalising data, and choosing which decisions to make, would probably require you to read through a few tutorials on the process. I won't link to any specific one, but there will be plenty for you to find.
Hope the above helps.