You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.6:统计文本文件单词所在行并输出至新文件的实现

Hey there! Let's walk through how to build this word-to-line-number tracker in Python 3.6, including writing the final results to a new file. I'll break down the code step by step so you understand exactly what's going on.

Step-by-Step Solution

First, here's the complete working code that matches your requirements:

# Initialize a dictionary to map words to their line numbers
word_to_lines = {}

# Open the input file and process each line (auto-closes when done)
with open('myfile.txt', 'r') as input_file:
    # Loop through lines with 1-based line numbers (matches your example)
    for line_number, line_content in enumerate(input_file, start=1):
        # Split the line into individual words, stripping extra whitespace
        words_in_line = line_content.strip().split()
        
        for raw_word in words_in_line:
            # Clean the word: remove common punctuation and standardize to lowercase
            # (this groups "Red" and "red" as the same word, per your sample output)
            cleaned_word = raw_word.strip('.;,!?').lower()
            
            # Skip empty strings if we ended up with one after stripping punctuation
            if not cleaned_word:
                continue
            
            # Add the current line number to the word's set of lines
            if cleaned_word not in word_to_lines:
                word_to_lines[cleaned_word] = set()
            word_to_lines[cleaned_word].add(line_number)

# Format the results into the required string format
output_entries = []
for word, line_numbers in sorted(word_to_lines.items()):
    # Sort line numbers and convert to space-separated text
    sorted_lines = ' '.join(map(str, sorted(line_numbers)))
    output_entries.append(f"{word} {sorted_lines}")

# Write the formatted results to a new file
with open('word_line_results.txt', 'w') as output_file:
    output_file.write('; '.join(output_entries))

How This Works

Let's break down each part to make it clear:

  1. Dictionary Setup: word_to_lines stores each cleaned word as a key, and a set of line numbers as the value. Using a set ensures we don't duplicate line numbers if a word appears multiple times in the same line.

  2. Reading the Input File:

    • The with open(...) syntax is best practice here—it automatically closes the file when we're done, so we don't have to remember to call close().
    • enumerate(input_file, start=1) gives us 1-based line numbers (your example uses 1, 2, 3, 4 instead of 0-indexed numbers).
  3. Cleaning Words:

    • raw_word.strip('.;,!?') removes common punctuation from the start/end of each word (adjust the characters inside the quotes if you need to handle other punctuation like parentheses).
    • .lower() standardizes all words to lowercase, so "Red" and "red" are counted as the same word (which matches your sample output where both map to lines 1 and 2). If you want to treat casing as distinct (e.g., "Hello" vs "hello"), just remove this part.
  4. Building the Mapping: For each cleaned word, we add the current line number to its set. If the word isn't in the dictionary yet, we create a new set for it first.

  5. Formatting Output:

    • We sort the words alphabetically to match the order in your sample output.
    • Each line number set is sorted and converted to a space-separated string, then formatted into "word line1 line2..." entries.
    • Finally, we join all entries with "; " and write them to word_line_results.txt.

Testing with Your Sample Input

If myfile.txt contains:

Hello I like the color red
Red is a primary color
I do not like blue
I like orange as well

The output file will have:
a 2; as 4; blue 3; color 1 2; do 3; hello 1; i 1 3; is 2; like 1 3; not 3; orange 4; primary 2; red 1 2; the 1; well 4

Which aligns perfectly with your expected output (just sorted alphabetically, which makes the results easier to read).

内容的提问来源于stack exchange,提问作者Mitchell Y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:34:00