我有这样的数据:data.txt
Product list
Name Quantity Price
Iphone11 5 14000000.0
SS note 10 4 13000000.0
Nokia C100 1 20000000.0 这是我的代码,用于过滤
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)我的结果是:
['Iphone11', '5', '14000000.0']
['SS', 'note', '10', '4', '13000000.0']
['Nokia', 'C100', '1', '20000000.0']我希望我的代码有类似于它的格式放在我的数据库中:
['Iphone11', '5', '14000000.0']
['SS note 10', '4', '13000000.0']
['Nokia C100', '1', '20000000.0']请帮帮我
发布于 2022-08-13 19:43:15
您可以使用str.rsplit()从右边拆分;将sep=None设置为拆分基任意空格;如果为每一行找到更多空白,则将maxsplit=2设置为只拆分两次并跳过。(最好像下面这样使用with,否则,您需要在打开和读取文件后关闭文件。)
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)['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 (默认值)意味着根据任何空格拆分,并从结果中丢弃空字符串。
发布于 2022-08-13 19:35:00
如果您不能修改您的数据,使其使用逗号进行正确的格式化,那么按空格进行解析将“拆分”带有空格的名称。
因此,您可以做的是使用back "*“来收集名称的所有部分,然后将它们重新组合起来,如下所示。
(数据变量模拟从文件中读取行)
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}')输出:
iphone11
qty: 5, price: 1100.0
nokia 5 plus
qty: 2, price: 1220.0
batphone 13 extra plus
qty: 3, price: 2000.0发布于 2022-08-13 21:48:45
看看潘达斯!
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)有许多选项几乎可以做任何事情!!
>>>df
0 1 2
0 Iphone11 5 14000000.0
1 SS note 10 4 13000000.0
2 Nokia C100 1 20000000.0如果要捕获标头,请尝试如下:
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.0https://stackoverflow.com/questions/73347100
复制相似问题