python show folder files and not subfolder files
Cameron Simpson
cs at cskk.id.au
Sun Oct 4 17:19:12 EDT 2020
On 04Oct2020 02:56, pascal z <barpasc at yahoo.com> wrote:
>On Thursday, September 24, 2020 at 4:37:07 PM UTC+2, Terry Reedy wrote:
>> Read
>> https://docs.python.org/3/faq/programming.html#what-is-the-most-efficient-way-to-concatenate-many-strings-together
>
>Thanks for this tip. I do think it's better to use lists than
>concatenate into string variable. However, writing a list to a csv file
>is not something easy. If strings stored into the list have commas and
>single quotes (like song title's), it messes up the whole csv when it
>first meets this. [...]
>[...]
>csv_contents = "%s;%s;%s;%.2f;%.2f;%.2f;%.2f;%s" % (vfolder_path,
>vfile_name, vfolder_path_full, 0.00, 0.00, 0.00,0.00, "folder")
>arr.append([csv_contents])
>[...]
Is there a reaon you're not using the csv module to write and read CSV
files. It knows how to correctly escape values in a number of common
dialects (the default dialect works well).
By composing CSV files with %-formatting (or with any crude string
cormatting) you the exact syntax issue you're describing. Faced with
user supplied data, these issues become "injection attacks", as
exemplified by this XKCD comics:
https://xkcd.com/327/
https://www.explainxkcd.com/wiki/index.php/Little_Bobby_Tables
The correct approach here is to have a general and _correct_ formatter
for the values, and to not assemble things with simplistic approaches
like %-formatting.
With databases the standard approach for assembling SQL is to provide
template SQL with the values as arguments, and have the db-specific
driver construct SQL for you. And with CSV files the same applies:
import the csv module and use csv.writer() to general the CSV data; you
just hand the writer an array of values (strings, floats, whatever) and
it takes care of using the correct syntax in the file.
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Python-list
mailing list