Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 打开python文件并附加特定信息_Python 3.x - Fatal编程技术网

Python 3.x 打开python文件并附加特定信息

Python 3.x 打开python文件并附加特定信息,python-3.x,Python 3.x,我有一个txt文件中的一些数据,我正试图将其排序到如下列表中: [ALASKA, [2006/10/19, 2.8], [2006/10/18, 2.6], etc etc] [MEXICO, [2006/10/20, 2.8], [2006/10/18, 3.3]] for each location without any tuples or '' 2.8 2006/10/19 02:02:10 62.391 -149.751 15.0 CENTRAL ALASKA 2.5 20

我有一个txt文件中的一些数据,我正试图将其排序到如下列表中:

[ALASKA, [2006/10/19, 2.8], [2006/10/18, 2.6], etc etc] 

[MEXICO, [2006/10/20, 2.8], [2006/10/18, 3.3]] for each location without any  tuples or ''


2.8 2006/10/19 02:02:10 62.391 -149.751 15.0 CENTRAL ALASKA

2.5 2006/10/19 00:31:15 20.119 -156.213 1.5 MAUI REGION, HAWAII

5.0 2006/10/18 21:15:51 4.823 -82.592 37.3 SOUTH OF PANAMA

2.6 2006/10/18 21:12:25 59.934 -147.904 30.0 GULF OF ALASKA

3.4 2006/10/18 20:59:21 36.540 -89.640 7.7 SOUTHEASTERN MISSOURI
代码:


现在我遇到了一个错误,line.split函数无法解包每行上的所有8条数据,是否有其他方法可以删除3:5项?我知道它可能是列表中的pop函数。

str.split
包含一个可选的
maxslit
参数,该参数限制要拆分的值,您可以使用该参数将整个位置名称作为单个项来获取。现在,您可以使用
dict
来收集每个位置的数据列表<代码>集合。defaultdict在这里很好,因为它会自动为新键创建值。现在,您有了一个日期/大小对列表,您可以在编写时使用
itertools.chain
对它们进行解压缩。把它们放在一起,你就会得到

import collections
import itertools

def main():
    locations = collections.defaultdict(list)   
    with open('data.txt','r') as file:
        for line in file:
            magnitude, date, time, x, y, z, location = line.strip().split(' ', 6)
            locations[location].append((date, magnitude))
    with open('output.txt', 'w') as outfile:
        for location, data in locations.items():
            outfile.write('{}, {}\n'.format(location, 
                ' ,'.join(itertools.chain.from_iterable(data))))
main()

print(open('output.txt').read())

此解决方案使用字典为每个区域设置保留每个事件的列表:

这是由于我没有文件而使用的示例数据:

data = [x.strip() for x in """
    2.8 2006/10/19 02:02:10 62.391 -149.751 15.0 CENTRAL ALASKA
    2.5 2006/10/19 00:31:15 20.119 -156.213 1.5 MAUI REGION, HAWAII
    5.0 2006/10/18 21:15:51 4.823 -82.592 37.3 SOUTH OF PANAMA
    2.6 2006/10/18 21:12:25 59.934 -147.904 30.0 GULF OF ALASKA
    3.4 2006/10/18 20:59:21 36.540 -89.640 7.7 SOUTHEASTERN MISSOURI
    """.split('\n')[1:-1]]
这段代码显示了如何遍历数据并将其拆分,同时维护整个位置。在发现整个位置后,很容易得到位置中的最后一个单词,并为该位置后缀保留每个事件的列表。并不是说传递给
split()
6
强制它将前五个字段之后的所有内容保留在一个剩余字段(位置)中:


像这样的方法应该会奏效:

def process(filename):
    d = {}
    with open(filename, "r") as f:
        for line in f:
            line_contents = line.split()
            if line_contents[-1] in d.keys(): # we already have an entry
                d[line_contents[-1]].append([line_contents[1], line_contents[0]])
            else:
                d[line_contents[-1]] = [[line_contents[1], line_contents[0]]]
    return d

如果愿意,还可以将每个键的值设置为元组列表。

请澄清代码中的问题-当前输出是什么?它应该是什么?目前,我预计会出现错误,因为当您尝试追加时,没有
category[1]
。你想改为使用字典
{'ALASKA':[…],…}
吗?你的
行.split(“”)
赋值会出错,因为在你显示的5个示例行中,有3行的末尾有2个以上的“location”单词。我也不明白你的数据的第一行应该是什么意思。我遇到了这样一个问题:我无法将每行的大小和日期保存为变量,因为我无法在不删除不必要的数据的情况下解包那么多变量(不知道如何在字符串中这样做)。理想情况下,我希望它看起来像**[阿拉斯加州,[2006/10/19,2.8],[2006/10/18,2.6]等等]***@skryt所以你只需要每行的前两个字段,用行中最后一个字段索引?@MattDMo从未想过这样看它,但是的,只是那些特定的片段。是否只有使用字典/元组才能处理字符串,我一直在尝试将其格式化为列表中的列表,但现在我在列表中添加项目时遇到了不必要的标点符号问题,例如()和“”的日期和日期magnitude@skryt我不太清楚你在问什么。我的代码创建了一个带有字符串键和列表值的字典,每个内部列表包含两个字符串。因此,如果你有三个阿拉斯加的条目,dict看起来像
{'Alaska':['2.6','2006/10/19'],['3.7','2006/11/21'],['2.4','2006/12/13']}
是只可能创建一个字典,还是可以在列表中创建整个内容?[阿拉斯加,[2.62006/10/19],[3.72006/11/21],[2.42006/12/13]@skryt可以创建一个列表列表,其中每个内部列表的位置作为第一个元素,后续元素是震级/日期对。问题是之后访问数据。您如何找到“墨西哥”值或“夏威夷”值一个?您首先需要搜索列表列表中的每个子列表以找到正确的子列表,获取其索引,然后使用该索引访问其他数据。使用dict,您可以使用
d[“LOCATION”]访问所有数据
,并使用进一步的切片来获取单个数据对。@skryt要添加到我上面所说的内容中,随着结果列表越来越大,所有的搜索将变得越来越昂贵,而使用dict则不会。
data_dict = {}
for line in data:
    magnitude, date, time, x, y, z, location = line.split(' ', 6)

    # get the last word in the location
    location_suffix = location.split(' ')[-1]

    # store the event
    if location_suffix not in data_dict:
        data_dict[location_suffix] = []
    data_dict[location_suffix].append((date, magnitude))
def process(filename):
    d = {}
    with open(filename, "r") as f:
        for line in f:
            line_contents = line.split()
            if line_contents[-1] in d.keys(): # we already have an entry
                d[line_contents[-1]].append([line_contents[1], line_contents[0]])
            else:
                d[line_contents[-1]] = [[line_contents[1], line_contents[0]]]
    return d