如何在第二个“,”处分割字符串

3

我正在尝试在第二个逗号处进行分割。

file = open()
dictionary = {}
for linje in filen:
    bites = linje. split()
    month = bites[0]
    temp = bites[0]
    dictionary[month] = temp
print(dictionary)

文件长这样:
Jan,1,2.7
Jan,2,2.8
Jan,3,0.7
Jan,4,1.8
Jan,5,1.2
...... each day every day of the year.

如果我写下 split(","),那么在我的字典中输出的结果会是这样的:
{Jan : Jan}.

如果我不拆分,它会变成这样:

{Jan,1,2.7 : Jan,1,2.7}

我希望它能像这样:

{Jan,1: 2.7}

date=','.join([bites[0], bites[1]]); temp = bites[2]; dictionary[date] = temp日期=','.join([bites[0], bites[1]]) 温度=bites[2] 字典[日期]=温度 - Stef
4个回答

3

您可以从右侧拆分并指定要拆分的数量:

with open('file_name') as filen:
    dictionary = {}
    for linje in filen:
        month, value = linje.rsplit(',', maxsplit=1)
        dictionary[month] = value
    print(dictionary)

顺便提一下:我建议将文件作为上下文管理器打开,即使用with语句。


@victorialangoe,rpartition 比 rsplit 更快,可以查看此链接,其中包含 200 万个句子:https://stackoverflow.com/questions/69210306/fastest-method-split-string-and-get-last-element/69212023#comment122329914_69212023 - I'mahdi
@user1740577 你会花更多的时间编写“rpartition”而不是在365行上节省时间。 - Yevhen Kuzmovych
我很难理解你 ;) - I'mahdi
1
@YevhenKuzmovych 从技术上讲,linje.rpartition(',')有21个字符,而linje.rsplit(',',maxsplit = 1)有29个字符 ;-) - Stef

3

我会选择上面提到的'rsplit'解决方案,但这里有一个使用普通split的解决方案:

file = open()
dictionary = {}
for linje in filen:
    digit,temp= linje[4:].split(',')
    month = linje[:4] # Months are represented by 3 chars. (4, including the comma)
    dictionary[month+digit] = temp #concat the digit to the month
print(dictionary)

如果您假设列具有固定的宽度,则不应使用split:dictionary = {linje[:5]: linje[6:] for linje in filen} - Stef
1
@Stef 当你到十月至十二月时,你需要改变切片的长度。 - Idan Rokach

2

使用rsplit进行一次拆分。

>>> part1, part2 = 'Jan,3,0.7'.rsplit(',', maxsplit=1)
>>> part1
'Jan,3'
>>> part2
'0.7'

2
file = '''Jan,1,2.7
Jan,2,2.8
Jan,3,0.7
Jan,4,1.8
Jan,5,1.2'''
file = file.split('\n')

keys = []
keysdata = []
for i in range(len(file)):
    files = file[i].split(',')
    keys.append(f'{files[0]}, {files[1]}')
    keysdata.append(float(files[2]))
dictionary = dict(zip(keys, keysdata))

print(dictionary)

输出:

{'Jan, 1': 2.7, 'Jan, 2': 2.8, 'Jan, 3': 0.7, 'Jan, 4': 1.8, 'Jan, 5': 1.2}

1
我建议使用keys.append((files[0], int(files[1])))来存储实际的Python对(月份,日期)作为键。 - Stef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接