首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我对Python中的拆分列表有问题。

我对Python中的拆分列表有问题。
EN

Stack Overflow用户
提问于 2022-08-13 19:23:13
回答 4查看 83关注 0票数 0

我有这样的数据:data.txt

代码语言:javascript
复制
Product list
Name                Quantity    Price           
Iphone11            5       14000000.0   
SS note 10          4       13000000.0   
Nokia C100          1       20000000.0 

这是我的代码,用于过滤

代码语言:javascript
复制
fname = open("Data.txt")
num_line = 0
for line in fname:
    num_line += 1
    if num_line == 1 or num_line == 2:
        continue
    data = line.strip().split()
    if data == []:
        continue
    
    print(data)

我的结果是:

代码语言:javascript
复制
['Iphone11', '5', '14000000.0']
['SS', 'note', '10', '4', '13000000.0']
['Nokia', 'C100', '1', '20000000.0']

我希望我的代码有类似于它的格式放在我的数据库中:

代码语言:javascript
复制
['Iphone11', '5', '14000000.0']
['SS note 10', '4', '13000000.0']
['Nokia C100', '1', '20000000.0']

请帮帮我

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-08-13 19:43:15

您可以使用str.rsplit()从右边拆分;将sep=None设置为拆分基任意空格;如果为每一行找到更多空白,则将maxsplit=2设置为只拆分两次并跳过。(最好像下面这样使用with,否则,您需要在打开和读取文件后关闭文件。)

代码语言:javascript
复制
with open("Data.txt") as fname:
    num_line = 0
    for line in fname:
        num_line += 1
        if num_line == 1 or num_line == 2:
            continue
            
        data = line.rsplit(maxsplit=2) # <-> line.rsplit(sep=None, maxsplit=2)
        if data == []:
            continue
        print(data)
代码语言:javascript
复制
['Iphone11', '5', '14000000.0']
['SS note 10', '4', '13000000.0']
['Nokia C100', '1', '20000000.0']

解释:

签名: str.rsplit(self,/,sep=None,maxsplit=-1) Docstring: sep ->分隔符,根据该分隔符来拆分字符串。None (默认值)意味着根据任何空格拆分,并从结果中丢弃空字符串。

票数 2
EN

Stack Overflow用户

发布于 2022-08-13 19:35:00

如果您不能修改您的数据,使其使用逗号进行正确的格式化,那么按空格进行解析将“拆分”带有空格的名称。

因此,您可以做的是使用back "*“来收集名称的所有部分,然后将它们重新组合起来,如下所示。

(数据变量模拟从文件中读取行)

代码语言:javascript
复制
data = ['iphone11 5 1100.0', 'nokia 5 plus 2 1220.0', 'batphone 13 extra` plus 3 2000.0']

for line in data:
    *name, qty, price = line.split()
    name = ' '.join(name)
    print (name)
    print (f'   qty: {qty}, price: {price}')

输出:

代码语言:javascript
复制
iphone11
   qty: 5, price: 1100.0
nokia 5 plus
   qty: 2, price: 1220.0
batphone 13 extra plus
   qty: 3, price: 2000.0
票数 1
EN

Stack Overflow用户

发布于 2022-08-13 21:48:45

看看潘达斯!

熊猫IO用户指南。

代码语言:javascript
复制
import pandas as pd
from io import StringIO

s="""Product list
Name                Quantity    Price           
Iphone11            5       14000000.0   
SS note 10          4       13000000.0   
Nokia C100          1       20000000.0 """

widths = [20, 8, 10]
df = pd.read_fwf(StringIO(s), widths=widths, header=None, skiprows=2)

有许多选项几乎可以做任何事情!!

代码语言:javascript
复制
>>>df
            0  1           2
0    Iphone11  5  14000000.0
1  SS note 10  4  13000000.0
2  Nokia C100  1  20000000.0

如果要捕获标头,请尝试如下:

代码语言:javascript
复制
df = pd.read_fwf(StringIO(s), widths=widths, header=0, skiprows=1)
df
         Name  Quantity       Price
0    Iphone11         5  14000000.0
1  SS note 10         4  13000000.0
2  Nokia C100         1  20000000.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73347100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档