项目开发:如何仅通过文件名读取未知所在目录的文件
Hey there! I totally get the frustration—trying to pull data from a file when you have no clue where it’s located on your system can feel like looking for a needle in a haystack. Let’s walk through practical, cross-platform solutions to handle this, whether your target file’s in the same folder as your script or tucked away somewhere else.
Before diving into a full search, start with the directory your script is running from—chances are the file might be right there. Here’s how to check in Python (adjust syntax for your language if needed):
import os target_file = "your_target_file.txt" # Get the directory your script is currently running in current_dir = os.getcwd() full_path = os.path.join(current_dir, target_file) if os.path.exists(full_path): with open(full_path, "r") as f: file_content = f.read() print("Success! Found the file in the current directory.") else: print("File not here—let’s start searching broader.")
Pro tip: If your script might be run from a different directory than where it’s stored (like if you’re using a packaged executable), use os.path.dirname(os.path.abspath(__file__)) instead of os.getcwd() to get the actual folder your script lives in.
If the file isn’t in the current directory, you’ll need to hunt through folders recursively. You can target a specific root (like your user home folder, to avoid searching the entire system which is slow and may need admin rights). Here’s a reusable function for this:
import os def find_target_file(filename, search_root): # Walk through every folder and file under the search root for root, _, files in os.walk(search_root): if filename in files: return os.path.join(root, filename) # Return None if no match is found return None target_file = "your_target_file.txt" # Start searching from your user home directory (works on Windows, macOS, Linux) search_start = os.path.expanduser("~") found_path = find_target_file(target_file, search_start) if found_path: with open(found_path, "r") as f: file_content = f.read() print(f"Got it! File located at: {found_path}") else: print("Hmm, couldn’t find that file anywhere in the search path.")
What if there are multiple files with the same filename? You’ll want to list all matches and let the user pick, or process them all. Here’s how to adjust the function to return all results:
import os def find_all_matches(filename, search_root): matches = [] for root, _, files in os.walk(search_root): if filename in files: matches.append(os.path.join(root, filename)) return matches target_file = "your_target_file.txt" search_start = os.path.expanduser("~") all_matches = find_all_matches(target_file, search_start) if all_matches: print(f"Found {len(all_matches)} files with that name:") for idx, path in enumerate(all_matches, 1): print(f"{idx}. {path}") # Let the user select which one to use selection = int(input("Enter the number of the file you want to load: ")) - 1 with open(all_matches[selection], "r") as f: file_content = f.read() else: print("No files with that name were found.")
- Limit your search scope: Searching the entire system (like
/on Unix orC:\on Windows) is slow and may require elevated permissions. Stick to specific folders you know might contain the file if possible. - System-specific shortcuts: If you’re targeting a single OS, you could use built-in tools (like
findon Linux/macOS ordir /son Windows) via a subprocess call, but the Python methods above are cross-platform. - File permissions: Make sure your script has read access to the folders it’s searching through—otherwise, it might skip over the file without telling you.
内容的提问来源于stack exchange,提问作者Kleanthis Karavangelas

