Extract lines from file, add to new files
dn
PythonList at DancesWithMice.info
Thu Jan 11 17:20:33 EST 2024
On 12/01/24 10:33, Left Right via Python-list wrote:
> By the way, in an attempt to golf this problem, I discovered this,
> which seems like a parser problem:
>
> This is what Python tells me about its grammar:
>
> with_stmt:
> | 'with' '(' ','.with_item+ ','? ')' ':' block
> | 'with' ','.with_item+ ':' [TYPE_COMMENT] block
> | ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block
> | ASYNC 'with' ','.with_item+ ':' [TYPE_COMMENT] block
>
> with_item:
> | expression 'as' star_target &(',' | ')' | ':')
> | expression
>
> From which I figured why not something like this:
>
> with (open('example.txt', 'r'), open('emails.txt', 'w'),
> open('salutations.txt', 'w')) as e, m, s:
> for line in e:
> if line.strip():
> (m if '@' in line else s).write(line)
>
> Which, surprise, parsers! But it seems like it's parse is wrong,
> because running this I get:
>
> ❯ python ./split_emails.py
> Traceback (most recent call last):
> File "/home/?/doodles/python/./split_emails.py", line 1, in <module>
> with (open('example.txt', 'r'), open('emails.txt', 'w'),
> open('salutations.txt', 'w')) as e, m, s:
> TypeError: 'tuple' object does not support the context manager protocol
>
> It seems to me it shouldn't have been parsed as a tuple. The
> parenthesis should've been interpreted just as a decoration.
>
> NB. I'm using 3.11.6.
A series of comma-separated items will be parsed as a tuple (some people
think it is bounding-parentheses which define).
In this case, the issue is 'connecting' the context-manager "expression"
with its (as) "target". These should be more-closely paired:-
with ( open( 'example.txt', 'r', ) as e,
open( 'emails.txt', 'w', ) as m,
open( 'salutations.txt', 'w', ) as s
):
(NB code not executed here)
A data-architecture of having related-data in separated serial-files is
NOT recommendable!
--
Regards,
=dn
More information about the Python-list
mailing list