Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #12275 > unrolled thread

Arrange files according to a text file

Started byRic@rdo
First post2011-08-27 13:03 -0400
Last post2011-08-27 16:31 -0700
Articles 11 — 4 participants

Back to article view | Back to comp.lang.python


Contents

  Arrange files according to a text file Ric@rdo - 2011-08-27 13:03 -0400
    Re: Arrange files according to a text file MRAB <python@mrabarnett.plus.com> - 2011-08-27 18:22 +0100
    Re: Arrange files according to a text file Emile van Sebille <emile@fenx.com> - 2011-08-27 11:06 -0700
      Re: Arrange files according to a text file Ric@rdo - 2011-08-27 16:15 -0400
        Re: Arrange files according to a text file Emile van Sebille <emile@fenx.com> - 2011-08-27 14:08 -0700
          Re: Arrange files according to a text file Ric@rdo - 2011-08-27 19:18 -0400
            Re: Arrange files according to a text file MRAB <python@mrabarnett.plus.com> - 2011-08-28 00:48 +0100
              Re: Arrange files according to a text file Ric@rdo - 2011-08-27 20:21 -0400
            Re: Arrange files according to a text file Emile van Sebille <emile@fenx.com> - 2011-08-27 18:10 -0700
              Re: Arrange files according to a text file Ric@rdo - 2011-08-28 01:24 -0400
    Re: Arrange files according to a text file Stephen Hansen <me+list/python@ixokai.io> - 2011-08-27 16:31 -0700

#12275 — Arrange files according to a text file

FromRic@rdo
Date2011-08-27 13:03 -0400
SubjectArrange files according to a text file
Message-ID<6j8i57t6cgqunn3c1ci4p7u9mnpnvsrl8s@4ax.com>
Hello,

What would be the best way to accomplish this task?
I have many files in separate directories, each file name
contain a persons name but never in the same spot.
I need to find that name which is listed in a large
text file in the following format. Last name, comma
and First name. The last name could be duplicate.

Adler, Jack
Smith, John
Smith, Sally
Stone, Mark
etc.


The file names don't necessary follow any standard 
format. 

Smith, John - 02-15-75 - business files.doc
Random Data - Adler Jack - expenses.xls
More Data Mark Stone files list.doc
etc

I need some way to pull the name from the file name, find it in the
text list and then create a directory based on the name on the list
"Smith, John" and move all files named with the clients name into that
directory.

[toc] | [next] | [standalone]


#12277

FromMRAB <python@mrabarnett.plus.com>
Date2011-08-27 18:22 +0100
Message-ID<mailman.467.1314465840.27778.python-list@python.org>
In reply to#12275
On 27/08/2011 18:03, Ric@rdo.python.org wrote:
> Hello,
>
> What would be the best way to accomplish this task?
> I have many files in separate directories, each file name
> contain a persons name but never in the same spot.
> I need to find that name which is listed in a large
> text file in the following format. Last name, comma
> and First name. The last name could be duplicate.
>
> Adler, Jack
> Smith, John
> Smith, Sally
> Stone, Mark
> etc.
>
>
> The file names don't necessary follow any standard
> format.
>
> Smith, John - 02-15-75 - business files.doc
> Random Data - Adler Jack - expenses.xls
> More Data Mark Stone files list.doc
> etc
>
> I need some way to pull the name from the file name, find it in the
> text list and then create a directory based on the name on the list
> "Smith, John" and move all files named with the clients name into that
> directory.

I would get a name from the text file, eg. "Adler, Jack", and then
identify all the files which contain "Adler, Jack" or "Adler Jack" or
"Jack Adler" in the filename, also checking the surrounding characters
to ensure that I don't split a name, eg. that "John" isn't part of
"Johnson".

[toc] | [prev] | [next] | [standalone]


#12286

FromEmile van Sebille <emile@fenx.com>
Date2011-08-27 11:06 -0700
Message-ID<mailman.473.1314468400.27778.python-list@python.org>
In reply to#12275
On 8/27/2011 10:03 AM Ric@rdo.python.org said...
> Hello,
>
> What would be the best way to accomplish this task?

I'd do something like:


usernames = """Adler, Jack
Smith, John
Smith, Sally
Stone, Mark""".split('\n')

filenames = """Smith, John - 02-15-75 - business files.doc
Random Data - Adler Jack - expenses.xls
More Data Mark Stone files list.doc""".split('\n')

from difflib import SequenceMatcher as SM


def ignore(x):
     return x in ' ,.'


for filename in filenames:
     ratios = [SM(ignore,filename,username).ratio() for username in 
usernames]
     best = max(ratios)
     owner = usernames[ratios.index(best)]
     print filename,":",owner


Emile



> I have many files in separate directories, each file name
> contain a persons name but never in the same spot.
> I need to find that name which is listed in a large
> text file in the following format. Last name, comma
> and First name. The last name could be duplicate.
>
> Adler, Jack
> Smith, John
> Smith, Sally
> Stone, Mark
> etc.
>
>
> The file names don't necessary follow any standard
> format.
>
> Smith, John - 02-15-75 - business files.doc
> Random Data - Adler Jack - expenses.xls
> More Data Mark Stone files list.doc
> etc
>
> I need some way to pull the name from the file name, find it in the
> text list and then create a directory based on the name on the list
> "Smith, John" and move all files named with the clients name into that
> directory.

[toc] | [prev] | [next] | [standalone]


#12294

FromRic@rdo
Date2011-08-27 16:15 -0400
Message-ID<opji57tr5n326aisk6uv373h4v09rtq876@4ax.com>
In reply to#12286
Hello Emile ,

Thank you for the code below as I have not encountered SequenceMatcher
before and would have to take a look at it closer.

My question would it work for a text file list of names about 25k
lines and a directory with say 100 files inside?

Thank you once again. 


On Sat, 27 Aug 2011 11:06:22 -0700, Emile van Sebille <emile@fenx.com>
wrote:

>On 8/27/2011 10:03 AM Ric@rdo.python.org said...
>> Hello,
>>
>> What would be the best way to accomplish this task?
>
>I'd do something like:
>
>
>usernames = """Adler, Jack
>Smith, John
>Smith, Sally
>Stone, Mark""".split('\n')
>
>filenames = """Smith, John - 02-15-75 - business files.doc
>Random Data - Adler Jack - expenses.xls
>More Data Mark Stone files list.doc""".split('\n')
>
>from difflib import SequenceMatcher as SM
>
>
>def ignore(x):
>     return x in ' ,.'
>
>
>for filename in filenames:
>     ratios = [SM(ignore,filename,username).ratio() for username in 
>usernames]
>     best = max(ratios)
>     owner = usernames[ratios.index(best)]
>     print filename,":",owner
>
>
>Emile
>
>
>
>> I have many files in separate directories, each file name
>> contain a persons name but never in the same spot.
>> I need to find that name which is listed in a large
>> text file in the following format. Last name, comma
>> and First name. The last name could be duplicate.
>>
>> Adler, Jack
>> Smith, John
>> Smith, Sally
>> Stone, Mark
>> etc.
>>
>>
>> The file names don't necessary follow any standard
>> format.
>>
>> Smith, John - 02-15-75 - business files.doc
>> Random Data - Adler Jack - expenses.xls
>> More Data Mark Stone files list.doc
>> etc
>>
>> I need some way to pull the name from the file name, find it in the
>> text list and then create a directory based on the name on the list
>> "Smith, John" and move all files named with the clients name into that
>> directory.
>

[toc] | [prev] | [next] | [standalone]


#12303

FromEmile van Sebille <emile@fenx.com>
Date2011-08-27 14:08 -0700
Message-ID<mailman.486.1314479310.27778.python-list@python.org>
In reply to#12294
On 8/27/2011 1:15 PM Ric@rdo.python.org said...
>
> Hello Emile ,
>
> Thank you for the code below as I have not encountered SequenceMatcher
> before and would have to take a look at it closer.
>
> My question would it work for a text file list of names about 25k
> lines and a directory with say 100 files inside?

Sure.

Emile


>
> Thank you once again.
>
>
> On Sat, 27 Aug 2011 11:06:22 -0700, Emile van Sebille<emile@fenx.com>
> wrote:
>
>> On 8/27/2011 10:03 AM Ric@rdo.python.org said...
>>> Hello,
>>>
>>> What would be the best way to accomplish this task?
>>
>> I'd do something like:
>>
>>
>> usernames = """Adler, Jack
>> Smith, John
>> Smith, Sally
>> Stone, Mark""".split('\n')
>>
>> filenames = """Smith, John - 02-15-75 - business files.doc
>> Random Data - Adler Jack - expenses.xls
>> More Data Mark Stone files list.doc""".split('\n')
>>
>>from difflib import SequenceMatcher as SM
>>
>>
>> def ignore(x):
>>      return x in ' ,.'
>>
>>
>> for filename in filenames:
>>      ratios = [SM(ignore,filename,username).ratio() for username in
>> usernames]
>>      best = max(ratios)
>>      owner = usernames[ratios.index(best)]
>>      print filename,":",owner
>>
>>
>> Emile
>>
>>
>>
>>> I have many files in separate directories, each file name
>>> contain a persons name but never in the same spot.
>>> I need to find that name which is listed in a large
>>> text file in the following format. Last name, comma
>>> and First name. The last name could be duplicate.
>>>
>>> Adler, Jack
>>> Smith, John
>>> Smith, Sally
>>> Stone, Mark
>>> etc.
>>>
>>>
>>> The file names don't necessary follow any standard
>>> format.
>>>
>>> Smith, John - 02-15-75 - business files.doc
>>> Random Data - Adler Jack - expenses.xls
>>> More Data Mark Stone files list.doc
>>> etc
>>>
>>> I need some way to pull the name from the file name, find it in the
>>> text list and then create a directory based on the name on the list
>>> "Smith, John" and move all files named with the clients name into that
>>> directory.
>>

[toc] | [prev] | [next] | [standalone]


#12316

FromRic@rdo
Date2011-08-27 19:18 -0400
Message-ID<o8ti57lf00gv696jg9p3ev8pc801rcdv0a@4ax.com>
In reply to#12303
Thank you so much. The code worked perfectly. 

This is what I tried using Emile code. The only time when it picked
wrong name from the list was when the file was named like this.

Data Mark Stone.doc

How can I fix this? Hope I am not asking too much?


import os
from difflib import SequenceMatcher as SM

path = r'D:\Files '
txt_names = []


with open(r'D:/python/log1.txt') as f:
    for txt_name in f.readlines():
        txt_names.append(txt_name.strip())

def ignore(x):
     return x in ' ,.'

for filename in os.listdir(path):
     ratios = [SM(ignore,filename,txt_name).ratio() for txt_name in
txt_names]
     best = max(ratios)
     owner = txt_names[ratios.index(best)]
     print filename,":",owner





On Sat, 27 Aug 2011 14:08:17 -0700, Emile van Sebille <emile@fenx.com>
wrote:

>On 8/27/2011 1:15 PM Ric@rdo.python.org said...
>>
>> Hello Emile ,
>>
>> Thank you for the code below as I have not encountered SequenceMatcher
>> before and would have to take a look at it closer.
>>
>> My question would it work for a text file list of names about 25k
>> lines and a directory with say 100 files inside?
>
>Sure.
>
>Emile
>
>
>>
>> Thank you once again.
>>
>>
>> On Sat, 27 Aug 2011 11:06:22 -0700, Emile van Sebille<emile@fenx.com>
>> wrote:
>>
>>> On 8/27/2011 10:03 AM Ric@rdo.python.org said...
>>>> Hello,
>>>>
>>>> What would be the best way to accomplish this task?
>>>
>>> I'd do something like:
>>>
>>>
>>> usernames = """Adler, Jack
>>> Smith, John
>>> Smith, Sally
>>> Stone, Mark""".split('\n')
>>>
>>> filenames = """Smith, John - 02-15-75 - business files.doc
>>> Random Data - Adler Jack - expenses.xls
>>> More Data Mark Stone files list.doc""".split('\n')
>>>
>>>from difflib import SequenceMatcher as SM
>>>
>>>
>>> def ignore(x):
>>>      return x in ' ,.'
>>>
>>>
>>> for filename in filenames:
>>>      ratios = [SM(ignore,filename,username).ratio() for username in
>>> usernames]
>>>      best = max(ratios)
>>>      owner = usernames[ratios.index(best)]
>>>      print filename,":",owner
>>>
>>>
>>> Emile
>>>
>>>
>>>
>>>> I have many files in separate directories, each file name
>>>> contain a persons name but never in the same spot.
>>>> I need to find that name which is listed in a large
>>>> text file in the following format. Last name, comma
>>>> and First name. The last name could be duplicate.
>>>>
>>>> Adler, Jack
>>>> Smith, John
>>>> Smith, Sally
>>>> Stone, Mark
>>>> etc.
>>>>
>>>>
>>>> The file names don't necessary follow any standard
>>>> format.
>>>>
>>>> Smith, John - 02-15-75 - business files.doc
>>>> Random Data - Adler Jack - expenses.xls
>>>> More Data Mark Stone files list.doc
>>>> etc
>>>>
>>>> I need some way to pull the name from the file name, find it in the
>>>> text list and then create a directory based on the name on the list
>>>> "Smith, John" and move all files named with the clients name into that
>>>> directory.
>>>
>

[toc] | [prev] | [next] | [standalone]


#12320

FromMRAB <python@mrabarnett.plus.com>
Date2011-08-28 00:48 +0100
Message-ID<mailman.495.1314488964.27778.python-list@python.org>
In reply to#12316
On 28/08/2011 00:18, Ric@rdo.python.org wrote:
> Thank you so much. The code worked perfectly.
>
> This is what I tried using Emile code. The only time when it picked
> wrong name from the list was when the file was named like this.
>
> Data Mark Stone.doc
>
> How can I fix this? Hope I am not asking too much?
>
Have you tried the alternative word orders, "Mark Stone" as well as
"Stone, Mark", picking whichever name has the best ratio for either?
>
> import os
> from difflib import SequenceMatcher as SM
>
> path = r'D:\Files '
> txt_names = []
>
>
> with open(r'D:/python/log1.txt') as f:
>      for txt_name in f.readlines():
>          txt_names.append(txt_name.strip())
>
> def ignore(x):
>       return x in ' ,.'
>
> for filename in os.listdir(path):
>       ratios = [SM(ignore,filename,txt_name).ratio() for txt_name in
> txt_names]
>       best = max(ratios)
>       owner = txt_names[ratios.index(best)]
>       print filename,":",owner
>
>
>
>
>
> On Sat, 27 Aug 2011 14:08:17 -0700, Emile van Sebille<emile@fenx.com>
> wrote:
>
>> On 8/27/2011 1:15 PM Ric@rdo.python.org said...
>>>
>>> Hello Emile ,
>>>
>>> Thank you for the code below as I have not encountered SequenceMatcher
>>> before and would have to take a look at it closer.
>>>
>>> My question would it work for a text file list of names about 25k
>>> lines and a directory with say 100 files inside?
>>
>> Sure.
>>
>> Emile
>>
>>
>>>
>>> Thank you once again.
>>>
>>>
>>> On Sat, 27 Aug 2011 11:06:22 -0700, Emile van Sebille<emile@fenx.com>
>>> wrote:
>>>
>>>> On 8/27/2011 10:03 AM Ric@rdo.python.org said...
>>>>> Hello,
>>>>>
>>>>> What would be the best way to accomplish this task?
>>>>
>>>> I'd do something like:
>>>>
>>>>
>>>> usernames = """Adler, Jack
>>>> Smith, John
>>>> Smith, Sally
>>>> Stone, Mark""".split('\n')
>>>>
>>>> filenames = """Smith, John - 02-15-75 - business files.doc
>>>> Random Data - Adler Jack - expenses.xls
>>>> More Data Mark Stone files list.doc""".split('\n')
>>>>
>>> >from difflib import SequenceMatcher as SM
>>>>
>>>>
>>>> def ignore(x):
>>>>       return x in ' ,.'
>>>>
>>>>
>>>> for filename in filenames:
>>>>       ratios = [SM(ignore,filename,username).ratio() for username in
>>>> usernames]
>>>>       best = max(ratios)
>>>>       owner = usernames[ratios.index(best)]
>>>>       print filename,":",owner
>>>>
>>>>
>>>> Emile
>>>>
>>>>
>>>>
>>>>> I have many files in separate directories, each file name
>>>>> contain a persons name but never in the same spot.
>>>>> I need to find that name which is listed in a large
>>>>> text file in the following format. Last name, comma
>>>>> and First name. The last name could be duplicate.
>>>>>
>>>>> Adler, Jack
>>>>> Smith, John
>>>>> Smith, Sally
>>>>> Stone, Mark
>>>>> etc.
>>>>>
>>>>>
>>>>> The file names don't necessary follow any standard
>>>>> format.
>>>>>
>>>>> Smith, John - 02-15-75 - business files.doc
>>>>> Random Data - Adler Jack - expenses.xls
>>>>> More Data Mark Stone files list.doc
>>>>> etc
>>>>>
>>>>> I need some way to pull the name from the file name, find it in the
>>>>> text list and then create a directory based on the name on the list
>>>>> "Smith, John" and move all files named with the clients name into that
>>>>> directory.
>>>>
>>

[toc] | [prev] | [next] | [standalone]


#12321

FromRic@rdo
Date2011-08-27 20:21 -0400
Message-ID<m42j57hmr0t4kg3uv4mccr4gkkl7te2ubf@4ax.com>
In reply to#12320
On Sun, 28 Aug 2011 00:48:20 +0100, MRAB <python@mrabarnett.plus.com>
wrote:

>On 28/08/2011 00:18, Ric@rdo.python.org wrote:
>> Thank you so much. The code worked perfectly.
>>
>> This is what I tried using Emile code. The only time when it picked
>> wrong name from the list was when the file was named like this.
>>
>> Data Mark Stone.doc
>>
>> How can I fix this? Hope I am not asking too much?
>>
>Have you tried the alternative word orders, "Mark Stone" as well as
>"Stone, Mark", picking whichever name has the best ratio for either?
>>

Yes I tried and the result was the same. I will try to work out
something. thank you. 
 
>> import os
>> from difflib import SequenceMatcher as SM
>>
>> path = r'D:\Files '
>> txt_names = []
>>
>>
>> with open(r'D:/python/log1.txt') as f:
>>      for txt_name in f.readlines():
>>          txt_names.append(txt_name.strip())
>>
>> def ignore(x):
>>       return x in ' ,.'
>>
>> for filename in os.listdir(path):
>>       ratios = [SM(ignore,filename,txt_name).ratio() for txt_name in
>> txt_names]
>>       best = max(ratios)
>>       owner = txt_names[ratios.index(best)]
>>       print filename,":",owner
>>
>>
>>
>>
>>
>> On Sat, 27 Aug 2011 14:08:17 -0700, Emile van Sebille<emile@fenx.com>
>> wrote:
>>
>>> On 8/27/2011 1:15 PM Ric@rdo.python.org said...
>>>>
>>>> Hello Emile ,
>>>>
>>>> Thank you for the code below as I have not encountered SequenceMatcher
>>>> before and would have to take a look at it closer.
>>>>
>>>> My question would it work for a text file list of names about 25k
>>>> lines and a directory with say 100 files inside?
>>>
>>> Sure.
>>>
>>> Emile
>>>
>>>
>>>>
>>>> Thank you once again.
>>>>
>>>>
>>>> On Sat, 27 Aug 2011 11:06:22 -0700, Emile van Sebille<emile@fenx.com>
>>>> wrote:
>>>>
>>>>> On 8/27/2011 10:03 AM Ric@rdo.python.org said...
>>>>>> Hello,
>>>>>>
>>>>>> What would be the best way to accomplish this task?
>>>>>
>>>>> I'd do something like:
>>>>>
>>>>>
>>>>> usernames = """Adler, Jack
>>>>> Smith, John
>>>>> Smith, Sally
>>>>> Stone, Mark""".split('\n')
>>>>>
>>>>> filenames = """Smith, John - 02-15-75 - business files.doc
>>>>> Random Data - Adler Jack - expenses.xls
>>>>> More Data Mark Stone files list.doc""".split('\n')
>>>>>
>>>> >from difflib import SequenceMatcher as SM
>>>>>
>>>>>
>>>>> def ignore(x):
>>>>>       return x in ' ,.'
>>>>>
>>>>>
>>>>> for filename in filenames:
>>>>>       ratios = [SM(ignore,filename,username).ratio() for username in
>>>>> usernames]
>>>>>       best = max(ratios)
>>>>>       owner = usernames[ratios.index(best)]
>>>>>       print filename,":",owner
>>>>>
>>>>>
>>>>> Emile
>>>>>
>>>>>
>>>>>
>>>>>> I have many files in separate directories, each file name
>>>>>> contain a persons name but never in the same spot.
>>>>>> I need to find that name which is listed in a large
>>>>>> text file in the following format. Last name, comma
>>>>>> and First name. The last name could be duplicate.
>>>>>>
>>>>>> Adler, Jack
>>>>>> Smith, John
>>>>>> Smith, Sally
>>>>>> Stone, Mark
>>>>>> etc.
>>>>>>
>>>>>>
>>>>>> The file names don't necessary follow any standard
>>>>>> format.
>>>>>>
>>>>>> Smith, John - 02-15-75 - business files.doc
>>>>>> Random Data - Adler Jack - expenses.xls
>>>>>> More Data Mark Stone files list.doc
>>>>>> etc
>>>>>>
>>>>>> I need some way to pull the name from the file name, find it in the
>>>>>> text list and then create a directory based on the name on the list
>>>>>> "Smith, John" and move all files named with the clients name into that
>>>>>> directory.
>>>>>
>>>

[toc] | [prev] | [next] | [standalone]


#12324

FromEmile van Sebille <emile@fenx.com>
Date2011-08-27 18:10 -0700
Message-ID<mailman.497.1314493823.27778.python-list@python.org>
In reply to#12316
On 8/27/2011 4:18 PM Ric@rdo.python.org said...
> Thank you so much. The code worked perfectly.
>
> This is what I tried using Emile code. The only time when it picked
> wrong name from the list was when the file was named like this.
>
> Data Mark Stone.doc
>
> How can I fix this? Hope I am not asking too much?

What name did it pick?  I imagine if you're picking a name from a list 
of 25000 names that some subset of combinations may yield like ratios.

But, if you double up on the file name side you may get closer:

for filename in filenames:
     ratios = [SM(ignore,filename+filename,username).ratio() for 
username in usernames]
     best = max(ratios)
     owner = usernames[ratios.index(best)]
     print filename,":",owner

... on the other hand, if you've only got a 100 files to sort out, you 
should already be done.

:)

Emile

[toc] | [prev] | [next] | [standalone]


#12333

FromRic@rdo
Date2011-08-28 01:24 -0400
Message-ID<v4kj57hvv5v1ueevj043pso14p035bce3o@4ax.com>
In reply to#12324
No, it turned out to be my mistake. Your code was correct and I
appreciate it very much.

Thank you again 

On Sat, 27 Aug 2011 18:10:07 -0700, Emile van Sebille <emile@fenx.com>
wrote:

>On 8/27/2011 4:18 PM Ric@rdo.python.org said...
>> Thank you so much. The code worked perfectly.
>>
>> This is what I tried using Emile code. The only time when it picked
>> wrong name from the list was when the file was named like this.
>>
>> Data Mark Stone.doc
>>
>> How can I fix this? Hope I am not asking too much?
>
>What name did it pick?  I imagine if you're picking a name from a list 
>of 25000 names that some subset of combinations may yield like ratios.
>
>But, if you double up on the file name side you may get closer:
>
>for filename in filenames:
>     ratios = [SM(ignore,filename+filename,username).ratio() for 
>username in usernames]
>     best = max(ratios)
>     owner = usernames[ratios.index(best)]
>     print filename,":",owner
>
>... on the other hand, if you've only got a 100 files to sort out, you 
>should already be done.
>
>:)
>
>Emile

[toc] | [prev] | [next] | [standalone]


#12318

FromStephen Hansen <me+list/python@ixokai.io>
Date2011-08-27 16:31 -0700
Message-ID<mailman.493.1314487883.27778.python-list@python.org>
In reply to#12275

[Multipart message — attachments visible in raw view] — view raw

On 8/27/11 11:06 AM, Emile van Sebille wrote:
> from difflib import SequenceMatcher as SM
> 
> def ignore(x):
>     return x in ' ,.'
> 
> for filename in filenames:
>     ratios = [SM(ignore,filename,username).ratio() for username in
> usernames]
>     best = max(ratios)
>     owner = usernames[ratios.index(best)]
>     print filename,":",owner

It amazes me that I can still find a surprising new tool in the stdlib
after all these years.

Neat.

/pinboards

-- 

   Stephen Hansen
   ... Also: Ixokai
   ... Mail: me+list/python (AT) ixokai (DOT) io
   ... Blog: http://meh.ixokai.io/

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web