Python3-查找在当前按字母顺序排列的文档中插入字符串的位置

Python3-查找在当前按字母顺序排列的文档中插入字符串的位置,python,list,csv,python-3.x,indexing,Python,List,Csv,Python 3.x,Indexing,因此,我现在有一个文档,其中有多个不同的项目,它们之间用逗号分隔 文档中每行的第一个单词都按字母顺序排列,因此每行都按字母顺序排列。我需要创建一个函数来查找要插入新字符串的索引,并保持字母列表的完整性。换句话说,插入它,使其仍按字母顺序排列 我使用下面的for循环在逗号处拆分每一行 infile = open("Brain.csv", "r") for line in infile: line.split(",") 我怎么能从这里开始呢?按字母顺序排列的单词当然在索引[0]中。Tsk

因此,我现在有一个文档,其中有多个不同的项目,它们之间用逗号分隔

文档中每行的第一个单词都按字母顺序排列,因此每行都按字母顺序排列。我需要创建一个函数来查找要插入新字符串的索引,并保持字母列表的完整性。换句话说,插入它,使其仍按字母顺序排列

我使用下面的for循环在逗号处拆分每一行

infile = open("Brain.csv", "r")

for line in infile:
    line.split(",")

我怎么能从这里开始呢?按字母顺序排列的单词当然在索引[0]中。

Tsk-Tsk..您开始编写一些代码。继续前进!没有必要让人们在互联网上解决你的问题。你能做到

以下是一些有用的提示:

  • 从每行中检索第一个单词并将其附加到列表中

    first_words = [f.split(",")[0] for line in infile]
    
  • 如何按字母顺序对字符串列表排序

    sorted_first_words = sorted(first_words, key=str.lower)
    
  • 查找新添加的“第一个单词”的索引

    sorted\u first\u words.index(“”)
    

  • 假设您有这样一个文件:

    Michael, Monroe, Stephen
    Shawn, Shila, Zed
    
    假设您希望在第二行中插入名称“Ted”,同时保留字母顺序。您只需打开文件,拆分单词,在列表中插入单词,对列表进行排序,然后将值追加到一起:

    with open("Brain.csv", "r") as file:
        text = file.readlines()
    text = [x.split(', ') for x in text]
    
    text[1].append("Ted")
    text[1].sort()
    
    text = [", ".join(i) for i in text]
    
    with open("Brain.csv", "w") as file:
        file.writelines(text)
    
    现在,当您打开该文件时,您将看到:

    Michael, Monroe, Stephen
    Shawn, Shila, Ted, Zed
    
    该模块提供和,可以轻松地读取和写入csv文件。也就是说,您可以将项目添加到列表中,并使用函数对其进行排序

    form bisect import insort
    import csv
    
    with open('brain.csv') as f, \
         open('brain_rewrite.csv', 'w') as out:
        f_csv = csv.reader(f)
        out_csv = csv.writer(out)
        for row in f_csv:
            g = sorted(i.strip() for i in row)
            insort(g, 'Foo') #here inserting word 'Foo' note that word case matter.
            out.writerow(g)
    

    你可以把字母想象成数字。比如A=1,B=2,C=3等等,所以你可以检查A是否大于T,以保持字母顺序。希望有帮助

    这就是对分。左对分的作用:

    演示:

    在a中找到x的插入点以保持排序顺序

    不适用于您可以执行的文件:

    >>> import bisect
    >>> import csv
    >>> def index_finder(file_name,st)
    ...   with open("file_name", "rb") as csvfile:
    ...      spamreader = csv.reader(csvfile, delimiter=',')
    ...      for row in spamreader:
                yield bisect.bisect_left(row,st)
    
    print list(index_finder("Brain.csv",sample_string))
    
    然后,结果将是一个生成器,其中包含可以插入示例字符串的每行中的所有位置

    要获取所有索引,您可以执行以下操作:

    >>> import bisect
    >>> import csv
    >>> def index_finder(file_name,st)
    ...   with open("file_name", "rb") as csvfile:
    ...      spamreader = csv.reader(csvfile, delimiter=',')
    ...      for row in spamreader:
                yield bisect.bisect_left(row,st)
    
    print list(index_finder("Brain.csv",sample_string))
    

    等等,我很困惑。您是否有未排序行的排序列表?e、 g.
    [[alpha]、[zulu]、[epsilon]、[beta]、[kappa]、[kappa]、[beta']
    或者它是排序行的排序列表?如果是后者,如果插入的单词出现在第一个索引之前,你想怎么办?嘿,首先谢谢你的回复!我想你们每个人都有点困惑?我现在有一个文件,文件的每一行都有名字,信息,信息。它由名称字母化,但我必须执行以下操作:该函数返回一个整数,指示名称列表中的索引,这样,如果在该索引处将给定字符串插入列表,列表仍将按字母顺序排列。嘿,首先感谢您的回复!我想你们每个人都有点困惑?我现在有一个文件,文件的每一行都有名字,信息,信息。它由名称字母化,但我必须执行以下操作:该函数返回一个整数,指示名称列表中的索引,这样,如果在该索引处将给定字符串插入列表,列表仍将按字母顺序排列。尝试得很好,但对于此类任务,也不需要使用
    readlines
    不是一个好主意,因为您可以逐个读取行并返回相对索引,如果要插入单词,您需要知道行数,并且可以使用
    fileinput