I'm trying to import data from a csv into a database following this repository.
I run the function on my windows desktop, and get this error:
['Customer Contracts$.csv', 'Customer Demo.csv', 'Customer Engagements.csv']
C:\Users\User\Code\DatabaseImporter/datasets/
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_17908/1233121651.py in <module>
16 print(csv_files)
17 configure_dataset_directory(csv_files, dataset_dir)
---> 18 df = create_df(dataset_dir, csv_files)
19
20 for k in csv_files:
~\Code\DatabaseImporter\csv_import_functions.py in create_df(dataset_dir, csv_files)
40 for file in csv_files:
41 try:
---> 42 df[file] = pd.read_csv(data_path+file)
43 except UnicodeDecodeError:
44 df[file] = pd.read_csv(data_path+file, encoding="ISO-8859-1") #if utf-8 encoding error
~\anaconda3\lib\site-packages\pandas\util\_decorators.py in wrapper(*args, **kwargs)
309 stacklevel=stacklevel,
310 )
--> 311 return func(*args, **kwargs)
312
313 return wrapper
~\anaconda3\lib\site-packages\pandas\io\parsers\readers.py in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, error_bad_lines, warn_bad_lines, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)
584 kwds.update(kwds_defaults)
585
--> 586 return _read(filepath_or_buffer, kwds)
587
588
~\anaconda3\lib\site-packages\pandas\io\parsers\readers.py in _read(filepath_or_buffer, kwds)
480
481 # Create the parser.
--> 482 parser = TextFileReader(filepath_or_buffer, **kwds)
483
484 if chunksize or iterator:
~\anaconda3\lib\site-packages\pandas\io\parsers\readers.py in __init__(self, f, engine, **kwds)
809 self.options["has_index_names"] = kwds["has_index_names"]
810
--> 811 self._engine = self._make_engine(self.engine)
812
813 def close(self):
~\anaconda3\lib\site-packages\pandas\io\parsers\readers.py in _make_engine(self, engine)
1038 )
1039 # error: Too many arguments for "ParserBase"
-> 1040 return mapping[engine](self.f, **self.options) # type: ignore[call-arg]
1041
1042 def _failover_to_python(self):
~\anaconda3\lib\site-packages\pandas\io\parsers\c_parser_wrapper.py in __init__(self, src, **kwds)
49
50 # open handles
---> 51 self._open_handles(src, kwds)
52 assert self.handles is not None
53
~\anaconda3\lib\site-packages\pandas\io\parsers\base_parser.py in _open_handles(self, src, kwds)
220 Let the readers open IOHandles after they are done with their potential raises.
221 """
--> 222 self.handles = get_handle(
223 src,
224 "r",
~\anaconda3\lib\site-packages\pandas\io\common.py in get_handle(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)
700 if ioargs.encoding and "b" not in ioargs.mode:
701 # Encoding
--> 702 handle = open(
703 handle,
704 ioargs.mode,
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\User\\Code\\DatabaseImporter/datasets/Customer Contracts$.csv'
I noticed in the videos he's using Mac. I think that's got something to do with the error. I tried to clean up the string using .replace, but didn't get any different results.
I created some test code, and found the something interesting.
import os
print(os.getcwd())
os.getcwd()
C:\Users\User\Code
'C:\\Users\\User\\Code'
I think this is also only half of the problem, as there are different slashes in the final error.
Use os.path.join instead of specific concatenation
Use shutil to move (instead of MV)
Use os.mkdir to make directory
Specify FileExistsError in error handling on mkdir